shiro讲解之 多Realm 之 Authorization

电玩女神 2022-06-06 04:24 339阅读 0赞

shiro讲解之 多Realm 之 Authorization

在本节之前我们学习了Shiro 的 多Realm 和 Authorization,现在我们将学习一下Shiro 的多 Realm Authorization。


实例

  • 多 Realm 的配置(参考 shiro讲解之 多Realm 之 Authentication)
  • Realms
    这里我们定义两个 Realm 分别为 shiroRealm 和 myRealm, 此处我们将不在贴出多 Realm 认证部分的代码了,我们至贴出 授权部分的代码。

    • shiroRealm

      1. @Override
      2. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
      3. Object principal = principals.getPrimaryPrincipal();
      4. Set<String> roles = new HashSet<>();
      5. roles.add("admin");
      6. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
      7. return info;
      8. }
    • myRealm

      1. @Override
      2. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
      3. Object principal = principals.getPrimaryPrincipal();
      4. Set<String> roles = new HashSet<>();
      5. roles.add("user");
      6. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
      7. return info;
      8. }

      在角色的设定上我们将登录的 Subject 同时赋予了 admin 和 user 角色。

  • 资源设置(Shiro Filter)

    1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    2. <property name="securityManager" ref="securityManager" />
    3. <property name="loginUrl" value="/login/toLogin" />
    4. <property name="successUrl" value="/example/index" />
    5. <property name="unauthorizedUrl" value="/example/unauthorized" />
    6. <property name="filterChainDefinitions">
    7. <value>
    8. /login/toLogin = anon
    9. /login/loginVal = anon
    10. /login/logout = logout
    11. /example/admin =roles[admin]
    12. /example/user = roles[user]
    13. /** = authc
    14. </value>
    15. </property>
    16. </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 的缓存我们将在后面的章节中学)

发表评论

表情:
评论列表 (有 0 条评论,339人围观)

还没有评论,来说两句吧...

相关阅读