springsecurity通过注解@PreAuthorize(“hasAuthority(‘xxx‘)“)实现方法级权限管理

1. 原理

1 进入hasAuthority()方法

在这里插入图片描述

2 上面方法调用了hasAnyAuthority()方法

在这里插入图片描述

3 上面方法调用了hasAnyAuthorityName()方法

在这里插入图片描述hasAnyAuthorityName() 方法中调用了getAuthoritySet() 方法返回一个权限Set,而getAuthoritySet() 方法则调用了getAuthorities() 。这个权限Set就是由getAuthorities()返回的Collection转换而来的。
在这里插入图片描述

而我们的项目之前在SecurityUser(UserDetails的实现类)中覆写了getAuthorities() 方法

在这里插入图片描述
当我们的前端提交用户名和密码进行登录时,会调用UserDetailsServiceImpl中我们覆写的
loadUserByUsername() 方法,创建SecurityUser对象并将根据用户名查询到的权限值列表赋值到SecurityUser对象的permissionValueList成员变量中,最后返回SecurityUser对象。
在这里插入图片描述

4

这样 spring调用 getAuthorities() 就能够我们登录时得到权限列表值。 最终回到@PreAuthorize(“hasAuthority(‘xxx’)”)注解,该注解就可以根据’xxx’是否存在于getAuthorities() 来判断该登录用户是否具有访问注解修饰的方法的权限。

2 使用

在这里插入图片描述
上面注解使用在了controller层中的某一个edit方法上,@PreAuthorize(“hasAuthority(‘xxx’)”)注解根据是否存在’mpp250.edit’来判定当前登录用户是否具有访问edit方法的权限。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值