詳解Spring Security中獲取當前登錄用戶的詳細信息的幾種方法
在Bean中獲取用戶信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!(authentication instanceof AnonymousAuthenticationToken)) {
String currentUserName = authentication.getName();
return currentUserName;
}Spring Security 框架提供了多種 AuthenticationToken 的派生類,根據自己的應用場景,可以對 SecurityContextHolder 里面的 AuthenticationToken 進行類型轉換,如下:
UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); // details里面存放了當前登錄用戶的詳細信息 User userDetails = (User) authenticationToken.getDetails();
PS. AuthenticationToken的類型轉換同樣適用于下面提到的Principal類。
在Controller中獲取用戶信息
- 通過Principal參數獲?。?/li>
import java.security.Principal;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RestController
public class SecurityController {
@GetMapping(value = "/username")
public String currentUserName(Principal principal) {
return principal.getName();
}
}- 通過Authentication參數獲?。?/li>
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RestController
public class SecurityController {
@GetMapping("/username")
@ResponseBody
public String currentUserName(Authentication authentication) {
return authentication.getName();
}
}- 通過HttpServletRequest獲取
import java.security.Principal;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
@RestController
public class SecurityController {
@GetMapping("/username")
public String currentUserNameSimple(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
return principal.getName();
}
}通過 Interface 獲取用戶信息
注意:IAuthenticationFacade 這個接口在springboot2.1.0中已不存在了
通過 Interface 獲取其實和第一種在 Bean 中獲取用戶信息是一樣的,都是訪問 SecurityContextHolder 獲取的,只是進行了封裝。
public interface IAuthenticationFacade {
Authentication getAuthentication();
}
@Component
public class AuthenticationFacade implements IAuthenticationFacade {
@Override
public Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
}下面是使用方法:
@RestController
public class SecurityController {
@Autowired
private IAuthenticationFacade authenticationFacade;
@GetMapping("/username")
public String currentUserNameSimple() {
Authentication authentication = authenticationFacade.getAuthentication();
return authentication.getName();
}
}在JSP頁面中獲取用戶信息
要使用 Spring Security 的標簽特性,首先要在 JSP 頁面引入 Security 的 tag:
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
通過以下方式可以獲取到當前登錄用戶:
<security:authorize access="isAuthenticated()">
authenticated as <security:authentication property="principal.username" />
</security:authorize>到此這篇關于詳解Spring Security中獲取當前登錄用戶的詳細信息的幾種方法的文章就介紹到這了,更多相關Spring Securit獲取登錄用戶信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解XML,Object,Json轉換與Xstream的使用
這篇文章主要介紹了詳解XML,Object,Json轉換與Xstream的使用的相關資料,需要的朋友可以參考下2017-02-02
springboot+dubbo啟動項目時報錯 zookeeper not connect
這篇文章主要介紹了springboot+dubbo項目啟動項目時報錯 zookeeper not connected的問題,本文給大家定位問題及解決方案,結合實例代碼給大家講解的非常詳細,需要的朋友可以參考下2023-06-06

