java代码shiro注解_java相关:Shiro集成Spring之注解示例详解
java相关:Shiro集成Spring之注解示例详解
发布于 2020-7-29|
复制链接
Shiro想必大家都知道了,是目前使用率要比spring security都要多的一个权限框架,下面
前言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 的注解支持 :
```java
```
简单演示
接着我们就可以使用注解来配置权限:
```java
@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 来进行异常处理:
```java
@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 来配置验证策略:
```java
// 拥有 admin 或 user 角色即可
@RequiresPermissions(logical = Logical.OR,value = {"admin", "user"})
// 需同时具备 admin 与 user 角色
@RequiresPermissions(logical = Logical.AND,value = {"admin", "user"})
```
RequiresRoles 同样可以配置验证策略。小结