前言
集成 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 | .class) (UnauthorizedException |
更多注解
当然不止有 @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/