spring security中当前用户信息,如果在jsp页面中获取可以使用spring security的标签库:在页面中引入标签<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
然后 <div>username : <sec:authentication property="name"/></div>即可显示当前用户。
如果要在程序中获得,看了网上很多写法都是在程序中写这样的代码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());
}
分享到:
相关推荐
- **获得源代码**:可以从 GitHub 或 Maven 仓库获取 Spring Security 的源代码。 #### 二、Spring Security 命名空间配置 ##### 2.1 命名空间的设计 Spring Security 提供了一个简洁的命名空间,用于简化配置...
- **获得当前用户的信息**:通过 SecurityContextHolder 获取当前用户的 Authentication 对象。 - **UserDetailsService**:提供查询用户信息的服务接口。 - **GrantedAuthority**:表示用户具有的权限或角色。 - *...
- **适用于Java工程师**:Spring Security主要针对Java开发者,尤其是那些需要了解如何在企业级应用中实施安全认证和授权的工程师。 - **了解前置知识**:为了更好地学习Spring Security,读者需要具备一定的基础...
- **获得源代码**:可以通过官方网站或其他途径获取Spring Security的源代码,以便深入了解其内部实现机制。 - **核心模块**: - **Core - spring-security-core.jar**:包含核心安全性功能,如认证、授权等。 -...
在"spring security demo2"项目中,我们很显然会深入探索如何在实际应用中配置和使用Spring Security来确保Web应用程序的安全性。让我们详细讨论Spring Security的核心概念、配置以及它在实践中的应用。 1. **核心...
在这个"Spring Security的例子"中,我们可以深入理解其核心概念和工作流程。 首先,Spring Security的核心组件包括: 1. **Filter Security Interceptor (FSI)**:这是Spring Security的Web安全部分,它通过一系列...
在深入研究Spring Security的源码之前,我们需要对它的一些核心概念有所了解。 1. **过滤器链**: Spring Security 的核心是基于过滤器的Web安全模型。它创建了一个过滤器链,其中每个过滤器都负责特定的安全任务...
它是 Spring Security 提供的全局访问点,可以在任何地方获取当前用户的认证状态。 - **AuthenticationManager**:该接口用于处理用户的登录请求,验证提供的凭证,并返回一个表示认证结果的 Authentication 对象。...
在现代Web应用开发中,Spring Boot和Spring Security是两个非常重要的框架。Spring Boot简化了Spring应用的初始搭建以及开发过程,而Spring Security则为应用程序提供了全面的安全管理解决方案。本教程将详细讲解...
- 认证成功后,Spring Security创建一个`Authentication`对象并存储在`SecurityContext`中。 2. **用户切换**:要实现用户切换,我们需要在用户界面提供一个选择或输入新用户名的功能,然后执行以下操作: - 获取...
在每个线程中,Spring Security通过`SecurityContextHolder`来获取或设置`Authentication`对象。 二、Spring Security配置 Spring Security的配置可以通过XML、Java配置或者使用`@EnableWebSecurity`注解的自定义...
Spring Security 实际上是基于 Filter 的,它通过在请求处理链中插入一系列的安全过滤器来实现其功能。 **一、Spring Security 的核心组件** 1. **Filter Security Interceptor (FSI)**:这是 Spring Security 的...
首先,Spring Security的基础是它提供的安全上下文,这是存储当前用户安全信息的地方。当用户登录时,认证过程发生,Spring Security会检查用户名和密码是否匹配,如果匹配则创建一个Authentication对象,包含用户的...
- Spring Security也支持OAuth2协议,允许第三方应用获取资源服务器上的数据,同时提供了客户端和资源服务器的实现。 8. **异常处理**: - 当认证或授权失败时,Spring Security会抛出相应的异常,如...
安全上下文是Spring Security中用于存储当前用户安全信息的地方,它保存了`Authentication`对象,是整个安全框架状态的集中表现。每当有请求到达时,Spring Security都会查询安全上下文中的`Authentication`对象,以...
获取Spring Security最直接的方式是从其官方网站下载最新的发行版,或者通过Maven仓库将其添加到项目的依赖列表中。对于初学者,建议从官方文档或教程开始学习,逐步熟悉Spring Security的安装、配置和使用流程。 #...
3. **在 web 页面中获取用户身份**:使用 Spring Security 提供的标签或 API 获取当前用户的认证信息。 4. **自定义配置**:如自定义登录页面、错误页面等。 5. **本地化消息输出**:通过配置文件实现不同语言的错误...
- 安全上下文(Security Context)是Spring Security存储当前用户安全信息的地方,包括Authentication对象和AccessDecisionManager。SecurityContextHolder类提供了获取和设置当前安全上下文的方法。 4. **表达式...
在Spring Security之前放置MultipartFilter 150 包含CSRF令牌 151 18.5.5隐藏的HttpMethodFilter 151 18.6覆盖默认值 151 19. CORS 152 20.安全性HTTP响应头 154 20.1默认的安全头 154 20.1.1缓存控制 157 20.1.2...