1 通過 SecurityContextHolder 獲取
在SecurityContextHolder
內部存儲了當前與應用程序交互的主體的詳細信息。 Spring Security 使用Authentication
對象來表示此信息。 通常不需要自己創建Authentication
對象,但是由於經常需要查詢Authentication
對象是相當普遍的。 可以在應用程序中的任何位置使用以下代碼塊來獲取當前經過身份驗證的用戶的名稱,例如:
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
if (principal instanceof UserDetails) {
String username = ((UserDetails)principal).getUsername();
} else {
String username = principal.toString();
}
調用getContext()
返回的對象是SecurityContext
接口的一個實例。 這是保存在線程本地存儲中的對象。 Spring Security 中的大多數身份驗證機制都將UserDetails
實例返回爲主體。
2 通過 Authentication 獲取
public Object getCurrentUser(Authentication authentication){
return authentication;
}
3 通過@AuthenticationPrincipal 獲取
public Object getCurrentUser(@AuthenticationPrincipal UserDetails user){
return user;
}
4 通過 Principal 獲取
public Object getCurrentUser(Principal principal){
return authentication;
}