zoukankan      html  css  js  c++  java
  • 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. }  



  • 相关阅读:
    Java实现 LeetCode 242 有效的字母异位词
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 212 单词搜索 II
    Java实现 LeetCode 344 反转字符串
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
    Java实现 洛谷 P1208 [USACO1.3]混合牛奶 Mixing Milk
  • 原文地址:https://www.cnblogs.com/jpfss/p/8695163.html
Copyright © 2011-2022 走看看