Shiro之授权

比眉伴天荒 2021-12-22 03:25 441阅读 0赞
  1. <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
  2. <!-- Shiro的核心安全接口,这个属性是必须的 -->
  3. <property name="securityManager" ref="securityManager"></property>
  4. <!-- 未认证,要跳转的url,非必须的属性,默认会自动寻找Web工程根目录下的"/login.jsp"页面 -->
  5. <property name="loginUrl" value="/loginPage"></property>
  6. <!-- 未授权,要跳转的url -->
  7. <property name="unauthorizedUrl" value="/unauthorizedPage"></property>
  8. <property name="filterChainDefinitions">
  9. <!-- anon:可以匿名访问 authc:必须认证登录后才能访问 -->
  10. <value>
  11. /loginPage=anon
  12. /doLogin=anon
  13. /doLogout=anon
  14. /page1 = roles[role1]
  15. /page2 = roles[role2]
  16. /*=authc
  17. </value>
  18. </property>
  19. </bean>

/page1 = roles[role1]

/page2 = roles[role2]

表示拥有role1角色可以访问/page1,拥有role2角色可以访问/page2

实现授权需要新建Realm继承AuthorizingRealm实现doGetAuthorizationInfo方法

  1. @Override
  2. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
  3. //从 PrincipalCollection 中来获取登录用户的信息
  4. Object principal = principals.getPrimaryPrincipal();
  5. String username=principal;
  6. //利用登录的用户的信息来用户当前用户的角色或权限(查询数据库省略),以下代码纯属测试
  7. Set<String> roles = new HashSet<>();
  8. roles.add("role1");
  9. if("admin".equals(username)){
  10. roles.add("role2");
  11. }
  12. //创建 SimpleAuthorizationInfo, 并设置其roles属性.
  13. SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
  14. //返回 SimpleAuthorizationInfo 对象.
  15. return info;
  16. }

Shiro 支持三种方式的授权:

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

if(subject.hasRole(“role1”)){

//有权限

}

else{

//无权限

}

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

@RequiresRoles(“role1”)

public void hello(){

}

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

Shiro的JSTL标签

导入标签库

<%@taglib uri=”http://shiro.apache.org/tags“ prefix=”shiro” %>

guest 标签:用户没有身份验证时显示相应信息,即游客访问信息

欢迎游客访问,登录

user 标签:用户已经经过认证/记住我登录后显示相应的信息

欢迎[]登录,退出

authenticated 标签:用户已经身份验证通过,即Subject.login登录成功,不是记住我登录的

  1. 用户\[<shiro:principal/>\]已身份验证通过

notAuthenticated 标签:用户未进行身份验证,即没有调用Subject.login进行登录,包括记住我自动登录的也属于

未进行身份验证

  1. 未身份验证(包括记住我)

pincipal 标签:显示用户身份信息,默认调用

Subject.getPrincipal() 获取,即 Primary Principal

相当于((User)Subject.getPrincipals()).getUsername()

hasRole 标签:如果当前 Subject 有角色将显示 body 体内容

  1. 用户\[<shiro:principal/>\]拥有角色role1<br/>

hasAnyRoles 标签:如果当前Subject有任意一个角色(或的关系)将显示body体内容

  1. 用户\[<shiro:principal/>\]拥有角色adminuser<br/>

</shiro:hasAnyRoles

lacksRole:如果当前 Subject 没有角色将显示 body 体内容

  1. 用户\[<shiro:principal/>\]没有角色abc<br/>

hasPermission:如果当前 Subject 有权限将显示 body 体内容

  1. 用户\[<shiro:principal/>\]拥有权限user:create<br/>

lacksPermission:如果当前Subject没有权限将显示body体内容

  1. 用户\[<shiro:principal/>\]没有权限org:create<br/>

Shiro注解

• @RequiresAuthentication:表示当前Subject已经通过login进行了身份验证;即Subject.isAuthenticated()返回 true

• @RequiresUser:表示当前 Subject 已经身份验证或者通过记住我登录的。

• @RequiresGuest:表示当前Subject没有身份验证或通过记住我登录过,即是游客身份。

• @RequiresRoles(value={“admin”, “user”}, logical=Logical.AND):表示当前 Subject 需要角色admin 和user

• @RequiresPermissions (value={“user:a”, “user:b”},logical= Logical.OR):表示当前 Subject 需要权限 user:a 或user:b。

转载于:https://www.cnblogs.com/zengnansheng/p/10389587.html

发表评论

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

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

相关阅读

    相关 Shiro授权

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

    相关 shiro授权

    意:在realm的情况下,其权限认证策略也是只要有一个realm的权限ok就好了,所以如果有多个realm的话,只要写其中一个就可以了。 来到我们写的realm: 将...

    相关 Shiro--授权

    首发网址:[Shiro--授权\_IT利刃出鞘的博客-CSDN博客][Shiro--_IT_-CSDN] 其他网址 [shiro简单配置\_运维\_都是浮云-CSDN博

    相关 shiro实现授权

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

    相关 Shiro---授权

    什么是授权? shiro是一款安全框架,开发中经常使用Shiro来进行认证和授权,所谓授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的

    相关 shiro(六)授权

    1.权限粒度:分为粗粒度和细粒度。粗粒度:对user的crud。也就是通常说的对表的操作。 细粒度:是对记录的操作。如:只允许查询id为1 的user的工资。shiro一般

    相关 Shiro--授权

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