Shiro 集成 Spring 之注解
前言
集成 Spring 后我们通过过滤器链来配置每个 URL 需要的权限,但当配置多了以后就会不方便,而且只支持 URL 级别的配置。
好在 Shiro 提供了相应的注解用于权限控制,此处使用了 Spring MVC 来测试Shiro注解,当然 Shiro 注解不仅仅可以在 web 环境使用,在独立的JavaSE 中也是可以用的,此处只是以 web 为例了。
开启注解配置
首先我们需要在 Spring Web 的配置文件 spring-web.xml
中加入以下内容来开启 Shiro 的注解支持 :
1 | <aop:config proxy-target-class="true"/> |
简单演示
接着我们就可以使用注解来配置权限:
1 |
|
访问 role1
方法需要当前用户有 user
角色,role2
方法需要 admin
角色。
当验证失败时,会抛出 UnauthorizedException
,我们可以使用 Spring 的 ExceptionHandler 来进行异常处理:
1 |
|
更多注解
当然不止有 @RequiresRoles
用来验证角色,Shiro 还提供了以下注解:
@RequiresAuthentication
验证用户是否登陆,等同于方法 subject.isAuthenticated() 。
@RequiresUser
验证用户是否被 记忆,即登陆成功或 RememberMe
状态。等同于方法 : subject.isAuthenticated()
与 subject.isRemembered()
。
@RequiresGuest
仅未登录状态可访问,与 @RequiresUser
完全相反。
@RequiresPermissions
验证是否具备权限,可通过参数 logical
来配置验证策略:
1 | // 拥有 admin 或 user 角色即可 |
RequiresRoles 同样可以配置验证策略。
小结
我们可以通过注解配置来更方便的实现权限配置,且这些方法不仅可以配置在 Controller 层,还可以在 Service 层,DAO 层等,只不过需要通过 IOC 容器来获取对象才能使用。
本章代码地址 : https://github.com/zhaojun1998/Premission-Study/tree/master/Permission-Shiro-10/