Shiro @RequiresPermissions注解是如何运转的?

 

目录

1、配置授权 

2、获取权限配置

3、运转

4、自定义处理异常 


Controller层的Method()上方添加了@RequiresPermissions注解,例如:

  @RequiresPermissions({"sys:user:add"} )
  void testMethod();

该注解要求Subject中必须含有sys:user:add的权限才能执行方法testMethod()。否则抛出异常AuthorizationException,可以方便api的权限控制。那么此注解又是如何运转生效的呢?接下来一起来了解下:

1、配置授权 

权限配置表中,授权用户角色对应的api操作权限,我这里配置的是perms字段(权限编码)的值为"sys:user:add",对应权限的名称为"新增”,并把该权限授权给用户;

2、获取权限配置

用户登录后,触发检测用户权限时会调用doGetAuthorizationInfo方法->权限信息认证(包括角色以及权限),是用户访问controller的时候才进行验证,我们会把权限信息缓存到redis中。其中getUserPermissionsSet方法会根据登录用户去获取已经授权的权限编码集合。

    @Override
	protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		String username = null;
		if (principals != null) {
            LoginUser sysUser = (LoginUser) principals.getPrimaryPrincipal();
			username = sysUser.getUsername();
		}
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
		// 设置用户拥有的权限集合,比如“sys:role:add,sys:user:add”
		Set<String> permissionSet = sysUserApi.getUserPermissionsSet(username).getResult();
		info.addStringPermissions(permissionSet);
        log.info("》》》Shiro权限认证成功");
		return info;
	}

3、运转

配置完毕后,web在请求带有@RequiresPermissions注解的api接口时,回去校验该用户是否拥有相应的权限编码,有则正常执行请求,无则抛出AuthorizationException异常。

4、自定义处理异常 

    @ExceptionHandler({UnauthorizedException.class, AuthorizationException.class})
	public Result<?> handleAuthorizationException(AuthorizationException e){
		log.error(e.getMessage(), e);
		return Result.noauth("没有权限,请联系管理员授权");
	}

 上一篇文章

vue+qrcode批量生成二维码

下一篇文章

mysql日期格式化处理

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值