Spring Security - 獲取當前登入使用者的詳細資訊
Spring Security - 獲取當前登入使用者的詳細資訊
在Spring框架裡面,可以通過以下幾種方式獲取到當前登入使用者的詳細資訊:
1. 在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裡面可能存放了當前登入使用者的詳細資訊,也可以通過cast後拿到
User userDetails = (User) authenticationToken.getDetails();
PS. AuthenticationToken
的型別轉換同樣適用於下面提到的Principal
類。
2. 在Controller
中獲取使用者資訊
- 通過
Principal
引數獲取:
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;
@Controller
public class SecurityController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
return principal.getName();
}
}
- 通過
Authentication
引數獲取:
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;
@Controller
public class SecurityController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@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;
@Controller
public class SecurityController {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserNameSimple(HttpServletRequest request) {
Principal principal = request.getUserPrincipal();
return principal.getName();
}
}
3. 通過Interface
獲取使用者資訊
通過Interface
獲取其實和第一種在Bean
中獲取使用者資訊是一樣的,都是訪問SecurityContextHolder
獲取的,只是進行了封裝。
public interface IAuthenticationFacade {
Authentication getAuthentication();
}
@Component
public class AuthenticationFacade implements IAuthenticationFacade {
@Override
public Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
}
下面是使用方法:
@Controller
public class SecurityController {
@Autowired
private IAuthenticationFacade authenticationFacade;
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserNameSimple() {
Authentication authentication = authenticationFacade.getAuthentication();
return authentication.getName();
}
}
4. 在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>
更多JSTL
的語法可以參考:https://docs.spring.io/spring-security/site/docs/5.0.0.RELEASE/reference/pdf/spring-security-reference.pdf
注意這是Spring Security 5.0
的版本,其他版本可以從https://docs.spring.io/spring-security/site/docs/這裡選擇。
相關文章
- C4C和CRM裡獲取當前登入使用者分配的Organization Unit資訊
- 百度地圖JavaScript API獲取使用者當前經緯度並獲取使用者當前詳細地理位置地圖JavaScriptAPI
- iphone 獲取地址的詳細資訊iPhone
- 企業微信登入獲取使用者資訊
- Linux 下檢視系統當前登入使用者資訊Linux
- 詳解Spring Security的HttpBasic登入驗證模式SpringHTTP模式
- ExtJs獲取GridPanel選中行的詳細資訊JS
- Yii2 獲取當前請求的路由資訊路由
- 根據微信code獲取換取使用者登入態資訊
- 微信小程式授權登入獲取使用者資訊微信小程式
- Spring Security 實戰乾貨:OAuth2登入獲取Token的核心邏輯SpringOAuth
- $request 請求方法 獲取 API 的當前使用者API
- js_原生js獲取當前的使用者ipJS
- Spring Security系列之實現簡訊登入(十)Spring
- JavaScript 獲取當前月份JavaScript
- 獲取當前時間
- 獲取當前修改的行記錄資料
- JVM 如何獲取當前容器的資源限制?JVM
- php 獲取當前域名和當前協議PHP協議
- jProcesses:使用Java獲取跨平臺程式的詳細資訊Java
- 【USER】Oracle 檢視使用者登入失敗次數及詳細資訊Oracle
- ThinkPHP5-微信小程式獲取使用者授權登入資訊PHP微信小程式
- Spring Security 前後端分離登入,非法請求直接返回 JSONSpring後端JSON
- 獲取當前頁面的topViewControllerViewController
- Java獲取當前星期幾Java
- mybatis獲取當前時間MyBatis
- Flutter 小知識,Key的使用(獲取當前點選Widget位置/獲取當前Widget大小)Flutter
- Spring Security(二)登入與安全控制Spring
- Spring Security 之 rememberMe 自動登入SpringREM
- Spring Security使用(二) 非同步登入Spring非同步
- 獲取當前Tomcat例項的埠Tomcat
- 獲取當前時間往前的日期
- Spark獲取當前分割槽的partitionIdSpark
- 獲取所有域使用者的登陸歷史資訊指令碼指令碼
- App 第三方登入獲取使用者資訊 支付寶登入後端程式碼參考APP後端
- 在 Linux 中查詢使用者帳戶和登入詳細資訊的 11 種方法Linux
- Spring Security(四):更新前端路由獲取方式Spring前端路由
- [提問交流]onethink框架,怎麼獲取當前使用者框架