SpringSecurity-@PreAuthorize("hasAuthority('')") 源码分析

1,103 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

@PreAuthorize

  1. 用来鉴别当前登录用户所拥有的角色是否有xxx权限访问该接口。

源码分析

  1. 源码分析

image.png

  1. 第一步方法中 authority 是我们传入的角色权限
  2. 第二步中直接去调用了第三步,第三步中的 this.getAuthoritySet();

image.png

该方法为获取当前用户所拥有角色的所有权限,Collection<? extends GrantedAuthority> userAuthorities = this.authentication.getAuthorities();此行为登录操作时应访问数据库将用户权限放入authentication中,也就是说,这一行将会把该用户所持角色的所有权限都查询出来。(需要事先存进去)

4. this.authentication.getAuthorities() 获取具体角色权限,返回全局private Set<String> roles;

image.png 5. String defaultedRole = getRoleWithDefaultPrefix(prefix, role); image.png 6. 全红部分这块应该是ROLE_admin 类型这样搭配组合使用

image.png

image.png

使用方式

image.png

需要在登陆时候查到角色对应权限存放到 UserDetails类中的private Set<GrantedAuthority> authorities;