ROLE_。ROLE_ 前輟的身分字串,以及一般的權限字串。
//...省略
return List.of(new SimpleGrantedAuthority("ROLE_" + role.getName()));
ROLE_ 再去做運算。@PreAuthorize("...") 時,Spring會做以下事情 :
authentication (當前登入者身分)principal (User物件)#方法參數 (如 #id, #account)
ADMIN / 是否是使用者本人? //* 刪除使用者
@PreAuthorize("hasRole('ADMIN') or #deleteUserRequest.id == authentication.principal.id")
@DeleteMapping("/users")
public Response<UserResponse> delete(@AuthenticationPrincipal User user, @RequestBody DeleteUserRequest deleteUserRequest){
return userService.delete(user.getAccount(), deleteUserRequest);
}
hasRole 解析時,就會去User物件找到Authority並檢查是否有 ROLE_ADMIN 的字串DTO資料,可以用 # 讓解析去找到DTO物件,並透過DTO.id與principal.id去比對!@RequirePermission 有甚麼差? ⭐⭐⭐⭐
RequestContextHolder 的request找到attribute,取出account並從DB去找身分...。本篇文章出自《每天學Java直到今年結束》Day234,大家可以到我的網站上查看~