shiro讲解之 多Realm 之 Authorization
shiro讲解之 多Realm 之 Authorization
在本节之前我们学习了Shiro 的 多Realm 和 Authorization,现在我们将学习一下Shiro 的多 Realm Authorization。
实例
- 多 Realm 的配置(参考 shiro讲解之 多Realm 之 Authentication)
Realms
这里我们定义两个 Realm 分别为 shiroRealm 和 myRealm, 此处我们将不在贴出多 Realm 认证部分的代码了,我们至贴出 授权部分的代码。shiroRealm
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
Object principal = principals.getPrimaryPrincipal();
Set<String> roles = new HashSet<>();
roles.add("admin");
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
return info;
}
myRealm
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
Object principal = principals.getPrimaryPrincipal();
Set<String> roles = new HashSet<>();
roles.add("user");
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
return info;
}
在角色的设定上我们将登录的 Subject 同时赋予了 admin 和 user 角色。
资源设置(Shiro Filter)
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login/toLogin" />
<property name="successUrl" value="/example/index" />
<property name="unauthorizedUrl" value="/example/unauthorized" />
<property name="filterChainDefinitions">
<value>
/login/toLogin = anon
/login/loginVal = anon
/login/logout = logout
/example/admin =roles[admin]
/example/user = roles[user]
/** = authc
</value>
</property>
</bean>
在资源的设定上,我们将 /example/admin 和 /example/user 两个资源分别交由 admin和 user 权限,即只有同时拥有 admin 和 user 角色时以上两个资源都能被访问。
结果
.
小结
- 多 Realm 的 Authorization 与多 Realm 的 Authentication 不同,Authorization 没有认证策略的选择。
使用多 Realm Authorization 时Subject 被赋予的角色属性是可以叠加的即一个Realm 将 Subjct 角色赋为 admin 另一个赋为 user ,那么该 Subject 最终两拥有两个角色:admin 和 user。进而以上两个的资源 Subject 也将同时享有。
所以在做多Realm 的 Authorization 尤其注意角色的赋予和权限边界的限定。
- Authorization 方法的触发在 Subject 访问某资源时发生,同时若使用了Shiro 的缓存功能的话 Subject的角色属性将会被写入缓存。当再次访问资源时,Shiro 将优先从缓存中获取当前 Subject 的角色属性。(Shiro 的缓存我们将在后面的章节中学)
还没有评论,来说两句吧...