shiro注解权限控制-5个权限注解

1.apache shiro权限框架有五个注解

  1. RequiresAuthentication:使用该注解标注的类,实例,方法在访问或调用时,当前Subject必须在当前session中已经过认证(一般指需要登录)。
  2. RequiresGuest:使用该注解标注的类,实例,方法在访问或调用时,当前Subject可以是“gust”身份,不需要经过认证或者在原先的session中存在记录。
  3. RequiresPermissions:当前Subject需要拥有某些特定的权限时,才能执行被该注解标注的方法。如果当前Subject不具有这样的权限,则方法不会被执行。
  4. RequiresRoles:当前Subject必须拥有所有指定的角色时,才能访问被该注解标注的方法。如果当天Subject不同时拥有所有指定角色,则方法不会执行还会抛出AuthorizationException异常(下面列出解决办法)。
  5. RequiresUser:当前Subject必须是应用的用户,才能访问或调用被该注解标注的类,实例,方法。

在使用@RequiresRoles注解时,如果没有该权限,则会直接返回500错误,这个时候我们需要抓取这个异常进行处理

@RestControllerAdvice//使用此注解可被spring扫描,一般用来做返回ResponseBody的异常处理切面类
public class RRExceptionHandler {
	private Logger logger = LoggerFactory.getLogger(getClass());

  @ExceptionHandler(UnauthorizedException.class)//捕捉权限不足异常
	public ResponseEntity<String> headleUnauthenticatedException(UnauthorizedException e){
		return new ResponseEntity<String>("权限不足,请联系管理员授权!", HttpStatus.FORBIDDEN);
	}


	@ExceptionHandler(Exception.class)//捕捉其他异常
	public ResponseEntity<String> handleException(Exception e){
		logger.error(e.getMessage(), e);
		return new ResponseEntity<String>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
	}

}

2.在一个Controller有多个shiro注解使用时,会按内定顺序处理,且条件都需要满足(与实际顺序无关)

RequiresRoles 
RequiresPermissions 
RequiresAuthentication 
RequiresUser 
RequiresGuest

RequiresRoles的使用

//属于admin角色
@RequiresRoles("admin")
 
//必须同时属于admin和superAdmin角色
@RequiresRoles({"admin","superAdmin"})
 
//属于superAdmin或者admin之一;修改logical为OR 即可
@RequiresRoles(value={"admin","superAdmin"},logical=Logical.OR)

RequiresPermissions 的使用

//符合index:hello权限要求
@RequiresPermissions("index:hello")
 
//必须同时复核index:hello和index:world权限要求
@RequiresPermissions({"index:hello","index:world"})
 
//符合index:hello或index:world权限要求即可
@RequiresPermissions(value={"index:hello","index:world"},logical=Logical.OR)

其他三个使用类似,直接加上就行

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值