Shiro授权(Authorization)

授权
授权,也叫访问控制,既在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等).在授权中需了解几个关键对象:主体(Subject),资源(Resource),权限(Permission).角色(Role).
主体
主体,既访问应用的用户,在Shiro中使用Subject代表该用户.用户只有授权后才允许访问相应的资源.
资源
在应用中用户可以访问的任何东西,比如访问JSP页面,查看/编辑某些数据,访问某个业务方法,打印文本等等都是资源.有货只有授权以后才能访问.
权限
安全策略中的原子授权单位,通过权限我们可以表示在应用中用户有没有操作某个资源的权力.既权限表示在应用中用户能不能访问某个资源,如:访问用户列表页面.查看/新增/修改/删除用户数据(既很多时候都是CRUD(添删改查)式权力控制),打印文档等等.
如上可以看出,权限代表了用户有没有操作某个资源的权力,既反映在某个资源上的操作允不允许,不富裕谁去执行这个操作.所以后续还需要把权限赋予给用户,既定义哪个用户允许在某个资源上做什么操作(权限),Shiro不会去做这件事情,而是由实现人员提供.
Shiro支持粗粒度权限(如用户模块的所有权限)和细粒度权限(操作某个用户的权限,既实例级别的).
角色
角色代表了操作集合,可以理解为权限的集合,一般情况下我们会赋予用户角色而不是权限,既这样用户可以拥有一组权限,赋予权限时比较方便.
Shiro支持两种角色模式:
1、传统角色:一个角色代表着一系列的操作,当需要对某一操作进行授权验证时,只需判断是否是该角色即可。这种角色权限相对简单、模糊,不利于扩展。
2、权限角色:一个角色拥有一个权限的集合。授权验证时,需要判断当前角色是否拥有该权限。这种角色权限可以对该角色进行详细的权限描述,适合更复杂的权限设计。
下面将详细描述对两种角色模式的授权实现。
隐式角色
既直接通过角色额来验证用户有没有操作权限,如在应用中CTO,技术总监,开发工程师可以使用打印机,假设某天不允许开发工程师使用打印机,此时需要从应用中删除相应的代码;再如在应用中CTO,技术总监可以查看用户,查看权限;突然有一天不允许技术总监查看用户,查看权限了,需要在相关代码中把技术总监角色从判断逻辑中删除掉;既粒度是以角色为单位进行访问控制的,粒度较粗;如果进行修改可能造成多出代码修改.
显式角色
在程序中通过程序可控制谁能访问某个资源,角色聚合一组权限集合;这样假设哪个角色不能访问某个紫云,只需要从角色代表的权限结合中移除即可;无须修改多出代码;既粒度是以资源/实例为单位的;粒度较细.
授权流程
在这里插入图片描述
1、在应用程序中调用授权验证方法(Subject的isPermitted或hasRole等)
2、Sbuject的实例通常是DelegatingSubject类(或子类)的实例对象,在认证开始时,会委托应用程序设置的securityManager实例调用相应的isPermitted或hasRole方法。
3、接下来SecurityManager会委托内置的Authorizer的实例(默认是ModularRealmAuthorizer 类的实例,类似认证实例,它同样支持一个或多个Realm实例认证)调用相应的授权方法。
4、每一个Realm将检查是否实现了相同的 Authorizer 接口。然后,将调用Reaml自己的相应的授权验证方法。

当使用多个Realm时,不同于认证策略处理方式,授权处理过程中:
1、当调用Realm出现异常时,将立即抛出异常,结束授权验证。
2、只要有一个Realm验证成功,那么将认为授权成功,立即返回,结束认证。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值