[email protected]("hasAuthority('')") 原始碼分析

語言: CN / TW / HK

theme: channing-cyan

本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

@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;