`
zm2011
  • 浏览: 38953 次
社区版块
存档分类
最新评论

在spring security获取当前对象

 
阅读更多
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());
}
分享到:
评论
1 楼 shuzhiduxing 2012-05-31  
万分感谢,困扰了我挺成时间的

相关推荐

    spring-security 官方文档 中文版

    - **获得当前用户的信息**:通过 SecurityContextHolder 获取当前用户的 Authentication 对象。 - **UserDetailsService**:提供查询用户信息的服务接口。 - **GrantedAuthority**:表示用户具有的权限或角色。 - *...

    初识 Spring Security - v1.1.pdf

    - **适用于Java工程师**:Spring Security主要针对Java开发者,尤其是那些需要了解如何在企业级应用中实施安全认证和授权的工程师。 - **了解前置知识**:为了更好地学习Spring Security,读者需要具备一定的基础...

    spring security 3.1获取所有已登录用户的终极方案

    在上述代码中,我们首先获取所有已认证的主体,然后遍历这些主体,检查它们是否为`UserDetails`类型(Spring Security中的用户详情对象),如果是,则将其添加到结果列表中。 `applicationContext-security.xml`是...

    spring security demo2

    在"spring security demo2"项目中,我们很显然会深入探索如何在实际应用中配置和使用Spring Security来确保Web应用程序的安全性。让我们详细讨论Spring Security的核心概念、配置以及它在实践中的应用。 1. **核心...

    Spring Security的例子

    在这个"Spring Security的例子"中,我们可以深入理解其核心概念和工作流程。 首先,Spring Security的核心组件包括: 1. **Filter Security Interceptor (FSI)**:这是Spring Security的Web安全部分,它通过一系列...

    Spring Security 源码

    在深入研究Spring Security的源码之前,我们需要对它的一些核心概念有所了解。 1. **过滤器链**: Spring Security 的核心是基于过滤器的Web安全模型。它创建了一个过滤器链,其中每个过滤器都负责特定的安全任务...

    Spring Security 中文教程.pdf

    - **获得源代码**:可以通过官方网站或其他途径获取Spring Security的源代码,以便深入了解其内部实现机制。 - **核心模块**: - **Core - spring-security-core.jar**:包含核心安全性功能,如认证、授权等。 -...

    Spring Security 3用户登录实现之十 用户切换

    - 认证成功后,Spring Security创建一个`Authentication`对象并存储在`SecurityContext`中。 2. **用户切换**:要实现用户切换,我们需要在用户界面提供一个选择或输入新用户名的功能,然后执行以下操作: - 获取...

    Spring Security笔记.rar

    在每个线程中,Spring Security通过`SecurityContextHolder`来获取或设置`Authentication`对象。 二、Spring Security配置 Spring Security的配置可以通过XML、Java配置或者使用`@EnableWebSecurity`注解的自定义...

    Spring Security模块

    Spring Security 实际上是基于 Filter 的,它通过在请求处理链中插入一系列的安全过滤器来实现其功能。 **一、Spring Security 的核心组件** 1. **Filter Security Interceptor (FSI)**:这是 Spring Security 的...

    spring-security实现复杂的权限管理

    首先,Spring Security的基础是它提供的安全上下文,这是存储当前用户安全信息的地方。当用户登录时,认证过程发生,Spring Security会检查用户名和密码是否匹配,如果匹配则创建一个Authentication对象,包含用户的...

    Spring Security安全权限管理手册 html

    - Spring Security也支持OAuth2协议,允许第三方应用获取资源服务器上的数据,同时提供了客户端和资源服务器的实现。 8. **异常处理**: - 当认证或授权失败时,Spring Security会抛出相应的异常,如...

    Spring Security 安全权限管理手册(最新)

    安全上下文是Spring Security中用于存储当前用户安全信息的地方,它保存了`Authentication`对象,是整个安全框架状态的集中表现。每当有请求到达时,Spring Security都会查询安全上下文中的`Authentication`对象,以...

    Spring_Security-3.0.1_中文官方文档(翻译版)

    - 安全上下文(Security Context)是Spring Security存储当前用户安全信息的地方,包括Authentication对象和AccessDecisionManager。SecurityContextHolder类提供了获取和设置当前安全上下文的方法。 4. **表达式...

    spring security 参考手册中文版

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

    Spring Security 2.0.x完全中文参考文档

    这些对象构成了Spring Security的核心,用于管理当前用户的认证信息和权限。 - **5.2.2. UserDetailsService** 用于加载用户详细信息的服务接口。 - **5.2.3. GrantedAuthority** 授予权限的接口,用于表示...

Global site tag (gtag.js) - Google Analytics