首页编程java编程java什么是权限控制 什么是Java类的访问权限

java什么是权限控制 什么是Java类的访问权限

编程之家2023-10-1387次浏览

今天给各位分享java什么是权限控制的知识,其中也会对什么是Java类的访问权限进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

java什么是权限控制 什么是Java类的访问权限

什么是Java类的访问权限

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

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

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

java什么是权限控制 什么是Java类的访问权限

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

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

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

java什么是权限控制 什么是Java类的访问权限

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

例1:

Main.java:

packagecom.cxh.test1;

publicclassMain{

/**

*@paramargs*/

publicstaticvoidmain(String[]args)

{

//TODOAuto-generatedmethodstub

Peoplepeople=newPeople("Tom");

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

}

}

People.java

packagecom.cxh.test1;

classPeople{//默认访问权限(包访问权限)

privateStringname=null;

publicPeople(Stringname)

{

this.name=name;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname)

{

this.name=name;

}

}

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

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中成员的访问权限共有四种,其中三种有访问权限修饰词:public,protected,private。

Public:权限最大,允许所有类访问,但其他包下的类想要访问需使用import关键字将这些public类导入包中才可使用,换句话说,import将不同包的类导入到一个包下,从而转化为包访问权限下的情况。

Protected:除了提供包访问权限以外,还对继承该类的所有派生类赋予访问权限。

Private:权限最小,只能由包含该成员(域和方法)的类本身访问,其他任何类都无法访问。

不使用这三个关键词时,则提供默认包访问权限,该权限只允许同一个包下(即同一个目录下的Java文件)的类访问该类。

注意:private和protected只能修饰成员,无法修饰类。类要么是public的,要么是包访问权限。

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类的访问权限的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

冈比亚巨鼠(冈比亚巨鼠排雷)java元数据是什么(java工作原理)