Shiro集成Spring之注解示例详解
前言
Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。
集成 Spring 后我们通过过滤器链来配置每个 URL 需要的权限,但当配置多了以后就会不方便,而且只支持 URL 级别的配置。
好在 Shiro 提供了相应的注解用于权限控制,此处使用了 Spring MVC 来测试Shiro注解,当然 Shiro 注解不仅仅可以在 web 环境使用,在独立的JavaSE 中也是可以用的,此处只是以 web 为例了。
下面话不多说了,来一起看看详细的介绍吧
开启注解配置
首先我们需要在 Spring Web 的配置文件 spring-web.xml 中加入以下内容来开启 Shiro 的注解支持 :
<aop:config proxy-target-class="true"/> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean>
简单演示
接着我们就可以使用注解来配置权限:
@RestController public class AuthorizationController { @RequestMapping("/role1") @RequiresRoles("user") public String role1() { return "success"; } @RequestMapping("/role2") @RequiresRoles("admin") public String role2() { return "success2"; } }
访问 role1 方法需要当前用户有 user 角色,role2 方法需要 admin 角色。
当验证失败时,会抛出 UnauthorizedException ,我们可以使用 Spring 的 ExceptionHandler 来进行异常处理:
@ExceptionHandler(UnauthorizedException.class) public String processUnauthorizedException(UnauthorizedException e) { return e.getMessage(); }
更多注解
当然不止有 @RequiresRoles 用来验证角色,Shiro 还提供了以下注解:
@RequiresAuthentication
验证用户是否登陆,等同于方法 subject.isAuthenticated()
。
@RequiresUser
验证用户是否被 记忆,即登陆成功或 RememberMe 状态。等同于方法 : subject.isAuthenticated()
与 subject.isRemembered()
。
@RequiresGuest
仅未登录状态可访问,与 @RequiresUser 完全相反。
@RequiresPermissions
验证是否具备权限,可通过参数 logical 来配置验证策略:
// 拥有 admin 或 user 角色即可 @RequiresPermissions(logical = Logical.OR,value = {"admin", "user"}) // 需同时具备 admin 与 user 角色 @RequiresPermissions(logical = Logical.AND,value = {"admin", "user"})
RequiresRoles 同样可以配置验证策略。
小结
我们可以通过注解配置来更方便的实现权限配置,且这些方法不仅可以配置在 Controller 层,还可以在 Service 层,DAO 层等,只不过需要通过 IOC 容器来获取对象才能使用。
本章代码地址 : https://github.com/zhaojun1998/Premission-Study/tree/master/Permission-Shiro-10/
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
相关文章
Java中BufferedReader与Scanner读入的区别详解
这篇文章主要介绍了Java中BufferedReader与Scanner读入的区别详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-10-10JVM性能调优实战:让你的IntelliJ Idea纵享丝滑
这篇文章主要介绍了JVM性能调优实战:让你的IntelliJ Idea纵享丝滑的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01一文带你掌握Java8中Lambda表达式 函数式接口及方法构造器数组的引用
Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等2021-10-10Springboot 如何使用 SaToken 进行登录认证、权限管理及路由规则接口拦截
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题,这篇文章主要介绍了Springboot 使用 SaToken 进行登录认证、权限管理以及路由规则接口拦截,需要的朋友可以参考下2024-06-06
最新评论