博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring security中当前用户信息
阅读量:6812 次
发布时间:2019-06-26

本文共 1889 字,大约阅读时间需要 6 分钟。

hot3.png

1:如果在jsp页面中获取可以使用spring security的标签库

       在页面中引入标签

1

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

     然后:

1

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

    即可显示当前用户。 

2:如果要在程序中获得

      看了网上很多写法都是在程序中写这样的代码

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中,此对象中有当前用户的各种资料 但我在实际运用中发现获得的Authentication为null。仔细看了下源代码发现,如果想用上面的代码获得当前用户,必须在spring  security过滤器执行中执行,否则在过滤链执行完时org.springframework.security.web.context.SecurityContextPersistenceFilter类会调用SecurityContextHolder.clearContext();而把SecurityContextHolder清空,所以会得到null。    经过spring security认证后,  security会把一个SecurityContextImpl对象存储到session中,此对象中有当前用户的各种资料

SecurityContextImpl securityContextImpl = (SecurityContextImpl) request.getSession().getAttribute("SPRING_SECURITY_CONTEXT");// 登录名System.out.println("Username:"+ securityContextImpl.getAuthentication().getName());// 登录密码,未加密的System.out.println("Credentials:"+ securityContextImpl.getAuthentication().getCredentials());WebAuthenticationDetails details = (WebAuthenticationDetails) securityContextImpl.getAuthentication().getDetails();// 获得访问地址System.out.println("RemoteAddress" + details.getRemoteAddress());// 获得sessionidSystem.out.println("SessionId" + details.getSessionId());// 获得当前用户所拥有的权限List
authorities = (List
) securityContextImpl.getAuthentication().getAuthorities();for (GrantedAuthority grantedAuthority : authorities) {System.out.println("Authority" + grantedAuthority.getAuthority());}

 

转载于:https://my.oschina.net/wangxinxx/blog/891047

你可能感兴趣的文章
属性扩展
查看>>
11.05面向对象 封装
查看>>
常用排序算法:桶排序
查看>>
操作SDO_GEOMETRY字段
查看>>
Why bugs don’t get fixed? 不是所有的Bug都要修复
查看>>
准备上线,切换到master分支,报错
查看>>
向量旋转专题
查看>>
287. Find the Duplicate Number
查看>>
struts1(一)流程分析
查看>>
SpringCloud 进阶之Eureka(服务注册和发现)
查看>>
2014华为机试,迷宫矩阵寻找单词的存在与否
查看>>
ASP.NET文件的上传与下载
查看>>
ADO.NET 数据库操作类
查看>>
PHP输出当前进程所有变量 / 常量 / 模块 / 函数 / 类
查看>>
django获取客户ip
查看>>
【分块】bzoj2120 数颜色
查看>>
python之类介绍
查看>>
C# 简单封装一个XML文件读取类
查看>>
C#DateTime的用法
查看>>
好博客网址
查看>>