博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro 角色与权限的解读
阅读量:6208 次
发布时间:2019-06-21

本文共 1939 字,大约阅读时间需要 6 分钟。

1、为什么 shiro 有了《角色》后,还要设置《角色权限》呢?(问题)

思考:设置好角色了,那么就代表什么操作都可以执行了吗?理解:如果上边回答是的话,那么只是《角色》层次的控制。举例:如果你是个老师,那么你就可以教学生数学课,但是现实呢,是个老师就能教数学课吗?体育老师、美术老师...路过;所以:角色权限就是用来指定这个角色可以做哪些操作。          换句话说角色就是某些权限的集合。          比如学校里面校长,老师,学生,等角色,但是他们都有不同的职业,这就是权限。          如果只有角色没有权限,那角色就没有意义了。
 
值的一提的是,《角色》 跟 《角色权限》 都是用来控制用户访问权限的,如果项目中只是需要用到 《角色》来限制用户访问,
那么,角色权限就没什么用了,所以,《角色权限》更像是《角色》更加细化后的操作,比如上边学校老师、校长、学生那个例子;
 

2、代码小例子

  /**     * 权限认证     */      @Override      protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {          //1、获取登录时输入的用户名          String loginName=(String) principalCollection.fromRealm(getName()).iterator().next();          //2、到数据库查是否有此对象          User user=userService.findByName(loginName);          if(user!=null){              //2.1、权限信息对象info,用来存放查出的用户的所有的角色(role)及权限(permission)              SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();              //2.2、用户的角色集合              info.addRoles(user.getRolesName());              //2.3、用户的角色对应的所有权限,如果只使用角色定义访问权限,下面的四行可以不要              List
roleList=user.getRoleList(); for (Role role : roleList) { info.addStringPermissions(role.getPermissionsName()); } return info; } return null; }
 
 上边代码截取的自定义 AuthorizingRealm 中 doGetAuthenticationInfo 方法;
 
    结合上方代码,举两个例子。
 
    一、角色控制
 
           场景:只允许(admin)登录角色显示
jsp 代码    
manager角色登录显示此内容
admin角色登录显示此内容
           
       
代码:上边 2.2 步骤,用户角色设置中,如果给该用户 “admin”权限,那么在 jsp 中就能显示出第一条来。
  info.addRoles("admin");
 
   
二、权限控制
 
            场景:只允许拥有 (add)权限的用户显示
  jsp 代码    
add权限用户显示此内容
edit权限用户显示此内容
           
   
代码:上边 2.3 步骤,用户角色权限设置中,如果给该用户角色设置 “add”权限,那么在 jsp 中就能显示出第一条来。
info.addStringPermissions("add");

3、补充

  关于 shiro 《角色》与《权限》相信你大概有一点概念了,下一篇会总结一下关于 shiro 常用注解,以及注解使用场景。

    
博客地址:http://www.cnblogs.com/niceyoo
 
 
 

转载于:https://www.cnblogs.com/niceyoo/p/9291986.html

你可能感兴趣的文章
sql 锁
查看>>
生死相依:说说JQuery中die()、live()详解[翻译]
查看>>
UML建模工具Visio 、Rational Rose、PowerDesign的比较
查看>>
JAVA常见算法题(九)
查看>>
Hbase集群扩展
查看>>
绘制loss曲线
查看>>
PHP守护进程化
查看>>
网络通信
查看>>
java C 类自动转换规则
查看>>
Oracle Essbase入门系列(一)
查看>>
大叔手记全集
查看>>
&和&&的区别
查看>>
如何申请开通微信多客服功能
查看>>
Sr_C++_Engineer_(LBS_Engine@Global Map Dept.)
查看>>
HTTP精简教程一:Web网络基础
查看>>
Linux快速复制或删除大量小文件
查看>>
[云框架]SMACK大数据架构
查看>>
威马汽车合伙人、CTO闫枫:用互联网思维改变百年汽车行业
查看>>
时间序列数据库的秘密(3)——加载和分布式计算
查看>>
python实现希尔排序算法
查看>>