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. }  



  • 相关阅读:
    JavaScript 弹出层,背景变暗
    DataGridView常见用法和FAQ汇总
    将visual studio 2005 SP1补丁整合到安装文件
    非常经典的网络蜘蛛示例
    asp.net画曲线图(折线图)
    Asp.net中基类页的设计和使用
    使用 Visual C# .NET 向 Excel 工作簿传输数据
    CSS布局:让页脚始终保持底部的方法
    WinForm开发,窗体显示和窗体传值相关知识总结
    asp.net Urlrewriter在虚拟主机上的使用方法
  • 原文地址:https://www.cnblogs.com/jpfss/p/8695163.html
Copyright © 2011-2022 走看看