shiro学习笔记九:shiro授权原理

综合实例:基于shiro的按钮级别的权限管理系统

一、授权理解

    授权:也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、 角色(Role)

(1)主体:即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有授权后才允许访问相应的资源

(2)资源:在应用中用户可以访问的任何东西,比如访问JSP 页面、查看/编辑某些数据、访问某个业 务方法、打印文本等等都是资源。用户只要授权后才能访问

(3)权限:安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力。即权限表示在应用中用户能不能访问某个资源,如:访问用户列表页面、查看/新增/修改/删除用户数据(即很多时候都是CRUD(增查改删)式权限控制)、打印文档等等

(4)角色:代表了操作集合,可以理解为权限的集合,一般情况下我们会赋予用户角色而不是权限,即这样用户可以拥有一组权限,赋予权限时比较方便。典型的如:项目经理、技术总 监、CTO、开发工程师等都是角色,不同的角色拥有一组不同的权限

二、授权方式

    Shiro 支持三种方式的授权: 

(1)编程式:通过写if/else 授权代码块完成

Subject subject = SecurityUtils.getSubject(); 
if(subject.hasRole(“admin”)) 
{ //有权限 } 
else 
{ //无权限 }

(2)注解式:通过在执行的Java方法上放置相应的注解完成,没有权限将抛出相应的异常

@RequiresRoles("admin") 
public void hello() 
{ //有权限 }

(3)JSP/GSP 标签:在JSP/GSP 页面通过相应的标签完成

<shiro:hasRole name="admin"> 
<!— 有权限—> 
</shiro:hasRole>

三、授权过滤器

roles、perms、port、rest、ssl

四、授权原理

88a9e151abbdbd2a3d60fe9dd9cc5b5ad27.jpg

    说明:

(1)首先会获取用户输入的账户/密码等

(2)调用Subject.isPermitted*/hasRole*接口,其会委托给SecurityManager,而 SecurityManager接着会委托给Authorizer

(3)Authorizer是真正的授权者,如果我们调用如isPermitted(“user:view”),其首先会通过PermissionResolver把字符串转换成相应的Permission实例

(4)在进行授权之前,其会调用相应的Realm获取Subject相应的角色/权限用于匹配传入的角色/权限

(5)Authorizer会判断Realm的角色/权限是否和传入的匹配,如果有多个Realm,会委托给ModularRealmAuthorizer进行循环判断,如果匹配如isPermitted*/hasRole*会返回true,否则返回false表示授权失败

五、多Realm授权规则

 (1)首先检查相应的Realm是否实现了实现了Authorizer 

(2)如果实现了Authorizer,那么接着调用其相应的isPermitted*/hasRole*接口进行匹配

(3)如果有一个Realm匹配那么将返回true,否则返回false
 

 

转载于:https://my.oschina.net/tij/blog/1929993

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值