詳解Spring Security中獲取當(dāng)前登錄用戶(hù)的詳細(xì)信息的幾種方法
在Bean中獲取用戶(hù)信息
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (!(authentication instanceof AnonymousAuthenticationToken)) {
String currentUserName = authentication.getName();
return currentUserName;
}Spring Security 框架提供了多種 AuthenticationToken 的派生類(lèi),根據(jù)自己的應(yīng)用場(chǎng)景,可以對(duì) SecurityContextHolder 里面的 AuthenticationToken 進(jìn)行類(lèi)型轉(zhuǎn)換,如下:
UsernamePasswordAuthenticationToken authenticationToken = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication(); // details里面存放了當(dāng)前登錄用戶(hù)的詳細(xì)信息 User userDetails = (User) authenticationToken.getDetails();
PS. AuthenticationToken的類(lèi)型轉(zhuǎn)換同樣適用于下面提到的Principal類(lèi)。
在Controller中獲取用戶(hù)信息
- 通過(guò)Principal參數(shù)獲?。?/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();
}
}- 通過(guò)Authentication參數(shù)獲?。?/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();
}
}- 通過(guò)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();
}
}通過(guò) Interface 獲取用戶(hù)信息
注意:IAuthenticationFacade 這個(gè)接口在springboot2.1.0中已不存在了
通過(guò) Interface 獲取其實(shí)和第一種在 Bean 中獲取用戶(hù)信息是一樣的,都是訪問(wèn) SecurityContextHolder 獲取的,只是進(jìn)行了封裝。
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頁(yè)面中獲取用戶(hù)信息
要使用 Spring Security 的標(biāo)簽特性,首先要在 JSP 頁(yè)面引入 Security 的 tag:
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags" %>
通過(guò)以下方式可以獲取到當(dāng)前登錄用戶(hù):
<security:authorize access="isAuthenticated()">
authenticated as <security:authentication property="principal.username" />
</security:authorize>到此這篇關(guān)于詳解Spring Security中獲取當(dāng)前登錄用戶(hù)的詳細(xì)信息的幾種方法的文章就介紹到這了,更多相關(guān)Spring Securit獲取登錄用戶(hù)信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot Mysql 數(shù)據(jù)庫(kù)操作示例
本篇文章主要介紹了Spring Boot Mysql 數(shù)據(jù)庫(kù)操作示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02
Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小
今天小編就為大家分享一篇關(guān)于Java利用三目運(yùn)算符比較三個(gè)數(shù)字的大小,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12
Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法
這篇文章主要為大家詳細(xì)介紹了Mybatis-Spring連接mysql 8.0配置步驟出錯(cuò)的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06
Java使用觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警功能示例
這篇文章主要介紹了Java使用觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警功能,結(jié)合完整實(shí)例形式分析了java觀察者模式實(shí)現(xiàn)氣象局高溫預(yù)警的相關(guān)接口定義、使用、功能操作技巧,并總結(jié)了其設(shè)計(jì)原則與適用場(chǎng)合,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04
利用Java編寫(xiě)一個(gè)Java虛擬機(jī)
這篇文章主要為大家詳細(xì)介紹了如何使用 Java17 編寫(xiě)的 Java 虛擬機(jī),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的可以了解下2023-07-07

