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

