【济南校区】权限控制方式讲解
权限控制两种主要的方式:细粒度方法级别的权限控制、粗粒度URL级别权限控制
1.1细粒度方法级别的权限控制
原理:在业务处理方法上添加自定义注解,运行时创建目标对象的代理对象,在代理方法中使用反射技术读取注解的信息,获取需要的权限,并查询当前用户是否有相应的权限。
1.2、方法上使用的注解:
@RequiresRole(“”)// 表示访问当前方法需要哪些角色,等同于subject.hasRole()或者subject.hasAllRoles
@RequiresPermissions(“”)//表示访问当前方法需要哪些权限,等同于subject.isPermitted()或者subject.isPermittedAll
@RequiresAuthentication //验证用户是否登录,等同于subject.isAuthenticated();
@RequiresUser //验证用户是否已登录或者已记忆,等同于subject.isAuthenticated();或者subject.isRemembered();
@RequiresGuest //验证是否是一个guest请求,与@RequiresUser完全相反,即 @RequiresGuest== ! @RequiresUser
1.3、开启注解:
1.4、对于新增快递员的权限控制
@RequiresPermissions("corier_add")
public void save(Couriser couriser){couris}
5、测试发现权限控制没有生效
原因:收到@Transactional注解的影响,权限代理设置为JDK代理时,会针对接口代理,但是父类、父接口中找不到@RequiresPermissions 注解
我们的解决办法就是把代理的方式设置成cglib
2.粗粒度URL级别权限控制
通过Filter判断当前是否具有权限对应的URL地址,如果对应权限列表中没有当前访问的URL,权限不足,如果对应的权限列表中有这个URL代表允许访问。
在数据库中,存放用户、权限、访问URL之间的关系,如果用户访问一个URL地址,查询数据库判断用户当前具有权限,是否包含URL,如果包含则允许访问,如果不包含,权限不足。
我们通常使用的方式是第二种,粗粒度的URL级别的权限控制。
【黑马程序员济南】小鲁哥哥全学科技术整合帖(一贴在手!天下我有!)
如果你想了解更多黑马课程,如果你想加入黑马这个大家庭学习先进技术,光交天下好友,那就快来吧!
黑马程序员济南中心联系电话:0531-55696830
网友评论