「java权限限制」java实现权限控制

博主:adminadmin 2022-12-25 10:06:08 58

本篇文章给大家谈谈java权限限制,以及java实现权限控制对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java访问权限是什么?

1、private修饰词,表示成员是私有的,只有自身可以访问;

2、protected,表示受保护权限,体现在继承,即子类可以访问父类受保护成员,同时相同包内的其他类也可以访问protected成员。

3、无修饰词(默认),表示包访问权限(friendly, java语言中是没有friendly这个修饰符的,这样称呼应该是来源于c++ ),同一个包内可以访问,访问权限是包级访问权限;

4、public修饰词,表示成员是公开的,所有其他类都可以访问;

5、类的访问限制,仅有public和包访问权限;

a、一个Java文件只能有一个public类

b、public类的名称必须同Java文件名完全一致

c、若Java文件中没有public类,则文件名可以任意

6、final关键字

a、final数据成员,使用前总是被初始化并被强制要求在定义处或构造器中赋值;一旦赋值后,对于基本类型其值会恒定不变,而对于对象引用会始终指向赋值的对象,但指向对象自身是可以修改的;

b、final参数,对于基本类型表示无法改变参数的值,对于对象引用表示无法改变引用所指的对象;

c、final方法,保证方法不会在继承后修改和重载;所有的private方法都隐含式final的;Java中使用动态绑定(后期绑定)实现多态,除了static和final方法是使用前期绑定的;

d、final类,表示该类不可被继承。

java如何做权限管理

首先介绍下思路:

1、用户表 user;

2、角色表 role;

3、菜单 menu;

4、角色菜单权限表 role_menu;

5、用户菜单权限表 user_menu;

如图:

根据用户角色取出该角色所有权限,并对用户进行权限分配;注意菜单的按钮(新增、删除、修改)权限是放在中间表(user_menu)中的;

1、新增用户时,是要根据用户角色进行分配权限的 一定记得批量添加;批量、批量、批量,重要的事情说三遍,不要查询角色权限,然后for循环,这样效率太低了;

SQL如下:

INSERT INTO sys_user_menu(UserId, MenuId, DelPower,    UpdPower,    InsPower,    ViewPower)

SELECT #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #{roleId}

updPower 默认都是有的 所以都是1,这样根据角色查询出权限直接添加,响应时间大大提升;

2、修改用户角色也要记得重新分配用户权限哦!这个不能忘,可以用上面的方法;

业务方法:

如果角色没有修改,是不用重新分配权限的,所有userRole 重置为 null,如果角色修改则删除原权限,重新进行分配;

3、最后要优化的就是根据用户查询权限的时候啦,我最开始是这样做的,查询角色权限,用户权限,返回到前端,前端进行处理;结果就是很卡 基本上要三到四秒,

解决方案,一步到位;一个查询返回全部数据。

如下SQL:

SELECT menu.MenuId id, ParentId pid, MenuName text,

(SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #{userId} AND  MenuId = sm.MenuId) isShow,

(SELECT CONCAT(

(CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',

(CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',

(CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',

(CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))

FROM sys_user_menu smenu WHERE smenu.UserId = #{userId}

AND  smenu.MenuId = sm.MenuId) MenuInfo

FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId

WHERE RoelId = #{roleId}

首先根据 角色ID查询出权限,然后子查询用户是否有该权限,有返回1 木用返回 0;

最后按钮权限 我是直接拼接成字符串,分别对应 添加、删除、修改、查看 1 有该按钮 0 没有该按钮;

优化后 不管是添加、修改用户,加载用户权限都能控制在 1~2 秒;

Java中怎么设置文件权限

在Java中,文件权限是非常具体的操作系统:* nix中,NTFS(Windows)及FAT/FAT32,都有着别样的文件权限。 Java提供了一些通用的文件权限来处理它。

检查文件权限允许:

1.file.canExecute(); – 返回true,文件是可执行的,false 则不是。

2.file.canWrite(); – 返回true,文件是可写的,false 则不是。

3.file.canRead(); – 返回true,文件是可读的,false 则不是。

设置文件权限:

1.file.setExecutable(boolean); – true允许执行操作; false则是禁止它。

2.file.setReadable(boolean); – true允许读操作; false则是禁止它。

3.file.setWritable(boolean); – true允许写操作; false则是禁止它。

在* nix的系统中,可能需要配置有关文件权限的详细指定,例如设置777权限的文件或目录,但是,Java的IO类没有现成的方法,但你可以使用下面的解决方法:

Runtime.getRuntime().exec("chmod 777 file");文件权限的例子

import java.io.File;

import java.io.IOException;

×只能给当前用户赋予对该文件的权限,调用createNewFile()方法默认的权限是644.

×/

public class FilePermission

{

public static void main( String[] args )

{

try {

File file = new File("/home/test3.txt");

if (file.createNewFile()){

System.out.println("File is created!");

//Runtime.getRuntime().exec("chmod 777 /home/test3.txt");

file.setExecutable(true);//设置可执行权限

file.setReadable(true);//设置可读权限

file.setWritable(true);//设置可写权限

System.out.println("is execute allow : " + file.canExecute());

System.out.println("is read allow : " + file.canRead());

System.out.println("is write allow : " + file.canWrite());

}else{

System.out.println("File already exists.");

}

} catch (IOException e) {

e.printStackTrace();

}

}

java中怎么设置文件权限?

import java.io.IOException;/××只能给当前用户赋予对该文件的权限,调用createNewFile()方法默认的权限是644.\x0d\x0a×/public class FilePermission{public static void main( String[] args ){try {File file = new File("/home/test3.txt");\x0d\x0aif (file.createNewFile()){\x0d\x0aSystem.out.println("File is created!");\x0d\x0a//Runtime.getRuntime().exec("chmod 777 /home/test3.txt");\x0d\x0afile.setExecutable(true);//设置可执行权限\x0d\x0afile.setReadable(true);//设置可读权限\x0d\x0afile.setWritable(true);//设置可写权限\x0d\x0aSystem.out.println("is execute allow : " + file.canExecute());\x0d\x0aSystem.out.println("is read allow : " + file.canRead());\x0d\x0aSystem.out.println("is write allow : " + file.canWrite());}else{System.out.println("File already exists.");}

什么是Java类的访问权限?

在解释访问权限控制之前,先看一个场景。

在学生信息管理系统中,有两个类,分别是学生类和课程类,课程类提供了课程表和课程安排两个方法,学生类可以调用课程类提供的课程表查看课程安排,但不能调用课程安排方法,该如何处理,此时就可以利用访问权限来进行控制。

在Java中,提供了四种访问权限控制:默认访问权限(包访问权限),public,private以及protected。

默认访问权限(default):即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

private: 对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。

protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护的”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。

public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。下表列出了四种访问权限的控制粒度:

例1:

Main.java:

package com.cxh.test1; 

public class Main { 

    /**     

    * @param args     */ 

   public static void main(String[]  args) 

   {   

       // TODO Auto-generated method stub

       People     people = new People("Tom");     

       System.out.println(people.getName());    

    }

}

People.java

package com.cxh.test1;

class People {   //默认访问权限(包访问权限) 

    private String name =  null;

    public People(String name)

    { 

       this.name     = name;   

     }

     public String getName() { 

       return     name; 

     } 

    public void setName(String  name) 

    {        

        this.name     = name;

    }

}

从代码可以看出,修饰People类采用的是默认访问权限,而由于People类和Main类在同一个包中,因此People类对于Main类是可见的。

Java的访问控制权限有哪几种?试以类格式形式列出Java的访问控制。

访问权限的等级最大到最小依次是:public,protected,包访问权限(无关键字)和private。

成员的访问权限取得对某成员(属性和方法)的实现方法有下面四种情况

1, 权限设置为public; 2, 默认包访问权限,在同一包中的其他类,可以访问; 3, 权限设置为public或者protected,通过继承的子类可以访问; 4, 设置为private,提供访问器和变异器方法(get/set);

下面介绍这四种权限(相对成员而言)

1, 包访问权限,在同一包中的类可以访问; 2, Public:接口访问权限,任何类都可以访问; 3, Private:你无法访问,除了包含该成员的类,其他类都可以访问。 4, Protected:继承访问权限,包括包访问权限。在同一包中,还有就是子类可以访问。

类的访问权限类的访问

只有两种:包访问权限或public(用法同上) 如果不希望其他类拥有该类的访问权限,可以把这个来说有的构造器制定为private(比如单列模式)。

java权限限制的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java实现权限控制、java权限限制的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-25,除非注明,否则均为首码项目网原创文章,转载请注明出处。