Spring security获取当前用户
1、如果在jsp页面中获取可以使用spring security的标签
页面引入标签
- <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
使用:
- <div> username : <sec:authentication property="name"/></div>
<div> username : <sec:authentication property="name"/></div>
即可显示当前用户。
2.java代码中使用
- UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication() .getPrincipal();
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中,此对象中有当前用户的各种资料
- 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());
- // 获得sessionid
- System.out.println("SessionId" + details.getSessionId());
- // 获得当前用户所拥有的权限
- List<GrantedAuthority> authorities = (List<GrantedAuthority>) securityContextImpl
- .getAuthentication().getAuthorities();
- for (GrantedAuthority grantedAuthority : authorities) {
- System.out.println("Authority" + grantedAuthority.getAuthority());
- }
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());
// 获得sessionid
System.out.println("SessionId" + details.getSessionId());
// 获得当前用户所拥有的权限
List<GrantedAuthority> authorities = (List<GrantedAuthority>) securityContextImpl.getAuthentication().getAuthorities();
for (GrantedAuthority grantedAuthority : authorities) {System.out.println("Authority" + grantedAuthority.getAuthority());
}
Spring security获取当前用户相关推荐
- Spring Security默认的用户登录表单 页面源代码
Spring Security默认的用户登录表单 页面源代码 <html><head><title>Login Page</title></hea ...
- 在spring security手动 自定义 用户认证 SecurityContextHolder
1.Spring Security 目前支持认证一体化如下认证技术: HTTP BASIC authentication headers (一个基于IEFT RFC 的标准) HTTP Digest ...
- Spring Security实现JDBC用户登录认证
在搭建博客后端服务框架时,我采用邮件注册+Spring Security登录认证方式,结合mysql数据库,给大家展示下具体是怎么整合的. 本篇是基于上一篇:spring boot实现邮箱验证码注册 ...
- Spring Security——获取当前已登录用户UserDetails对象
源代码 SecurityContextHolder.getContext().getAuthentication().getPrincipal() 对于WebSecurityConfigurer中关于 ...
- 微服务商城系统(十) Spring Security Oauth2 + JWT 用户认证
文章目录 一.用户认证分析 1.认证 与 授权 2.单点登录 3.第三方账号登录 4.第三方认证 5.认证技术方案 6.Security Oauth 2.0 入门 7. 资源服务授权 (1)资源服务授 ...
- .netcore 如何获取系统中所有session_集群化部署,Spring Security 要如何处理 session 共享?
前面和大家聊了 Spring Security 如何像 QQ 一样,自动踢掉已登录用户(Spring Boot + Vue 前后端分离项目,如何踢掉已登录用户?),但是前面我们是基于单体应用的,如果我 ...
- 用spring security设置用户jwt令牌和设置接口访问权限案例
文章目录 1.配置Swagger 2.spring security配置 3.用户校验逻辑 注册和登录接口 dao层 service层 pojo层 4.加密验证逻辑 5.生成令牌逻辑 身份验证提供者: ...
- Spring Security用户认证和权限控制(默认实现)
1 背景 实际应用系统中,为了安全起见,一般都必备用户认证(登录)和权限控制的功能,以识别用户是否合法,以及根据权限来控制用户是否能够执行某项操作. Spring Security是一个安全相关的框架 ...
- Spring Security登录用户数据获取(4)
1. 登录用户数据获取 登录成功之后,在后续的业务逻辑中,开发者可能还需要获取登录成功的用户对象,如果不使用任何安全管理框架,那么可以将用户信息保存在HttpSession中,以后需要的时候直接从 ...
最新文章
- ASP.Net ViewState的实现
- java ee 分页_【JavaEE】JavaEE分页实践
- ztree获取勾选节点数据并且与表单信息合并
- 07年末围炉盛宴 - 信息工作者应用与管理系列Webcast
- 做技术的为什么很难发财?
- 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读
- java 返回第k小的数_java – 给定n和k,返回第k个置换序列
- 站在“巨人”的肩膀上运维
- 函数 getaddrinfo 学习
- Activity管理类,随时随地退出应用程序
- 腾讯翻译君在线翻译怎么翻译整个文件_腾讯文档:在线多人协作文档工具
- 设置新的路由器无线网络连接服务器,路由器连接新路由器怎么设置 路由器连接新路由器设置方法【详解】...
- 2022质量员-土建方向-岗位技能(质量员)特种作业证考试题库及模拟考试
- 使用 WebSphere eXtreme Scale 处理事件流
- p2v之clonezilla(1)再生龙启动u盘制作
- ESXi6.5补丁更新
- 编写Windows服务程序,将Python作为Windows服务启动
- Comet OJ - 2019国庆欢乐赛 D1 入学考试 (简单版)
- Springboot学生作业管理系统毕业设计-附源码251208
- #个人日记-《扫黑·决战》电影观后感-20210511