Spring security獲取當前用戶


1、如果在jsp頁面中獲取可以使用spring security的標簽

頁面引入標簽

  1. <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>  

使用:

  1. <div> username : <sec:authentication property="name"/></div>  

即可顯示當前用戶。

2.java代碼中使用

  1. UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication() .getPrincipal();  

 但我在實際運用中發現獲得的Authentication為null。仔細看了下源代碼發現,如果想用上面的代碼獲得當前用戶,必須在spring    

     security過濾器執行中執行,否則在過濾鏈執行完時org.springframework.security.web.context.SecurityContextPersistenceFilter類會

     調用SecurityContextHolder.clearContext();而把SecurityContextHolder清空,所以會得到null。    經過spring security認證后,     

     security會把一個SecurityContextImpl對象存儲到session中,此對象中有當前用戶的各種資料

  1. SecurityContextImpl securityContextImpl = (SecurityContextImpl) request  
  2.  .getSession().getAttribute("SPRING_SECURITY_CONTEXT");  
  3. // 登錄名  
  4. System.out.println("Username:"  
  5.  + securityContextImpl.getAuthentication().getName());  
  6. // 登錄密碼,未加密的  
  7. System.out.println("Credentials:"  
  8.  + securityContextImpl.getAuthentication().getCredentials());  
  9. WebAuthenticationDetails details = (WebAuthenticationDetails) securityContextImpl  
  10.  .getAuthentication().getDetails();  
  11. // 獲得訪問地址  
  12. System.out.println("RemoteAddress" + details.getRemoteAddress());  
  13. // 獲得sessionid  
  14. System.out.println("SessionId" + details.getSessionId());  
  15. // 獲得當前用戶所擁有的權限  
  16. List<GrantedAuthority> authorities = (List<GrantedAuthority>) securityContextImpl  
  17.  .getAuthentication().getAuthorities();  
  18. for (GrantedAuthority grantedAuthority : authorities) {  
  19.  System.out.println("Authority" + grantedAuthority.getAuthority());  
  20. }  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM