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



  • 相关阅读:
    Android.mk高级写法
    Android Bitmap和Canvas学习笔记
    cocos2dx 3.x 开发环境搭建
    quick cocos2d-x 2.2.4 window环境调试
    Android应用开发相关下载资源(2014/12/14更新)
    quick-cocos2dx-2.2.4环境搭建
    U盘重装Windows系统
    Visual Studio 32位64位的问题和如何编译32位64位工程的问题
    使用UE4.16开发Oculus需要Oculus软件版本高于1.11
    UE4打包程序没有声音-需要安装UE4PrereqSetup_x64.exe
  • 原文地址:https://www.cnblogs.com/jpfss/p/8695163.html
Copyright © 2011-2022 走看看