Shiro系列十二:权限注解

本文详细解析了Shiro框架中的权限注解,包括@RequiresAuthentication、@RequiresUser、@RequiresGuest、@RequiresRoles和@RequiresPermissions的用法。通过示例展示了如何在Controller中应用这些注解来实现细粒度的权限控制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@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:auser:b 权限。

测试:
1、创建类ShiroService

public class ShiroService {
	
	public void testMethod(){
		System.out.println("testMethod, time: " + new Date());
	}
	
}

2、在Spring配置文件中配置bean

<bean id="shiroService"
    	class="com.atguigu.shiro.services.ShiroService"></bean>

3、创建接口shiro/testShiroAnnotation。添加权限注解 @RequiresRoles({"admin"})

@Controller
@RequestMapping("/shiro")
public class ShiroHandler {
	
	@Autowired
	private ShiroService shiroService;
	
	@RequiresRoles({"admin"})
	@RequestMapping("/testShiroAnnotation")
	public String testShiroAnnotation(){
		shiroService.testMethod();
		return "redirect:/list.jsp";
	}

}

结果:
 当登录的用户有admin角色时,可以正常访问,否则抛异常:

org.apache.shiro.authz.UnauthorizedException: Subject does not have role [admin]

 对于异常可以使用 spring 的声明式异常,使用注解 @ExceptionHandler 和 @ControllerAdvice 对异常进行统一处理。

 注意:在Service方法上一般都会使用注解 @Transactional,使得在方法开始的时候会有事务,这个时候Service已经是一个代理对象,这时权限注解就不能加到 Service上,会发生类型转换异常。需要加到Controller上,因为不能够让 Service 成为代理的代理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值