`
hanqunfeng
  • 浏览: 1541962 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SpringSecurity3.X--remember-me

阅读更多

目录

SpringSecurity3.X--一个简单实现

SpringSecurity3.X--前台与后台登录认证

SpringSecurity3.X--remember-me

SpringSecurity3.X--验证码

 

该问题已经在新版本中修复!!!!

 

笔者在SpringSecurity中配置remember-me时,遇到这样的问题,remember-me没有起作用,按照官方文档的讲解,只需要在<http>中增加<remember-me />配置,并在login.jsp中增加如下代码即可:

<input id="_spring_security_remember_me" name="_spring_security_remember_me" type="checkbox" value="true"/>

 

看上去挺简单的,可是笔者测试后发现并未起作用,google了一下,也未见有人提起过该问题,于是乎翻出源码一探究竟,果然发现了问题。

 

这里先简要说明一下SpringSecurity的登录过程:

UsernamePasswordAuthenticationFilter :获得用户提交的用户名和密码信息
-->UserDetailsService :由其封装用户对象
-->AbstractUserDetailsAuthenticationProvider :转由其进行密码和权限验证,验证通过后封装一个Authentication
-->ProviderManager:会将Authentication封装到SecurityContext中(默认情况下,ProviderManager会在认证成功后清除掉Authentication的密码信息,但会保留用户名称)
-->AbstractRememberMeServices :判断请求参数中是否包含_spring_security_remember_me参数,如果包含并且值为(true,on,yes,1)中的任意一个,则将用户名和密码信息保存进cookie,否则不做处理
-->AccessDecisionManager :由其决定是否放行

之后在请求被保护的资源时,RememberMeAuthenticationFilter会先判断是否Authentication已经失效,如果失效,则试图从cookie中寻找,找到则重新封装Authentication。

 

 

 

问题就出在ProviderManager中,其布尔属性eraseCredentialsAfterAuthentication默认值为true,如果为true则会在username和password验证成功后清除掉Authentication中的password信息,而AbstractRememberMeServices 保存cookie的条件则需要从Authentication中同时取得username和password,这就导致默认情况下AbstractRememberMeServices永远不会将username和password存储到cookie中,所以,为了保证username和password可以被正确的存储到cookie中,我们需要修改eraseCredentialsAfterAuthentication的值为false,好在修改这个属性很方便,如下:

<authentication-manager erase-credentials="false">
		<authentication-provider user-service-ref="userService">
			<password-encoder hash="md5" />
		</authentication-provider>
</authentication-manager>

     

 增加该配置后,则cookie信息被成功保存。

 

 默认情况下,cookie的有效期为两个星期,如果希望修改这个有效期,可以在<remember-me />中进行配置:

<remember-me  token-validity-seconds="123456789"/>

 

 

不知道为什么ProviderManager要这样处理,也许是我还没搞清楚缘由,希望与各位讨论。

 

该问题已经在新版本中修复!!!!

分享到:
评论
5 楼 adslkl 2014-10-09  
我使用的是版本是3.0.5<authentication-manager>标签里没有erase-credentials="false"这个属性 求大神指点。
4 楼 threejin520 2013-12-11  
属性不存在啊,楼主给点意见!
3 楼 bingfengfzl 2012-08-01  
兄弟可以发个demo给我吗?我免登陆那里老是不行bingfengfzl@163.com
2 楼 kjj 2011-10-31  
<authentication-manager erase-credentials="false"> 

启动报错,属性不存在这个标签里!!
1 楼 threejin520 2011-09-21  
受教了,这个还真没仔细看过!

相关推荐

    spring security 3.x session-management 会话管理失效

    - Spring Security提供了Remember-Me服务,允许用户在一定时间内无须重新登录。它通过存储用户凭据的哈希值在cookie中实现。此外,还可以通过自定义实现免登逻辑,例如OAuth2或JWT(JSON Web Tokens)。 7. **配置...

    SpringSecurity 3.0.1.RELEASE.CHM

    A.3. ACL表 A.3.1. Hypersonic SQL A.3.1.1. PostgreSQL B. 安全命名空间 B.1. Web应用安全 - 元素 B.1.1. 属性 B.1.1.1. servlet-api-provision B.1.1.2. path-type B.1.1.3. lowercase-comparisons B....

    springSecurity3.x

    在Spring Security 3.x版本中,它引入了许多改进和新特性,以增强应用程序的安全性。这个实例集提供了深入理解如何配置和使用Spring Security 3.x的实践指导。 1. **身份验证**:Spring Security的核心功能之一是...

    spring-security-4.0.3.RELEASE-全包

    2. **Authentication**:Spring Security提供了一套完整的身份验证机制,包括Remember Me服务、基于表单的登录、以及支持各种认证源如LDAP、数据库等。4.0.3版本可能包含了改进的认证流程和错误处理。 3. **...

    Spring Security 3.x 官网文档 chm格式 (中文版)

    《Spring Security 3.x 官方文档》是Java开发者学习Spring Security框架的重要参考资料,它以中文版的形式提供了全面且深入的指南。这份文档主要涵盖了Spring Security的核心概念、配置和使用方法,旨在帮助开发者...

    SpringSecurity3.x源码工程

    本源码工程是针对SpringSecurity3.x的深入学习资源,包含了实现文档对应的源代码,能够帮助开发者更好地理解和运用该框架。 首先,SpringSecurity的核心概念包括认证(Authentication)和授权(Authorization)。...

    spring-security-core-2.0.5.RELEASE.src

    - 对RememberMe服务进行了改进,增强了安全性。 总结 Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全配置等抽象成易于使用的组件。深入理解这个源代码...

    spring security 3.0x remember-me 免登陆

    .rememberMe().rememberMeServices(rememberMeServices()) .key("key") // 同上面的key .rememberMeParameter("remember-me") // 前端提交的参数名 .tokenRepository(persistentTokenRepository()) ....

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

    ### Spring Security 2.0.x完全中文参考文档 #### 序言 本文档旨在为用户提供一份详尽且全面的Spring Security 2.0.x版本的中文指南,它不仅覆盖了核心概念、配置方法以及实际应用案例,还深入探讨了安全框架的...

    springsecurity3x快速构建企业级安全

    **Spring Security 3.x 快速构建企业级安全** Spring Security是Java平台上广泛使用的安全框架,主要用于企业级应用的安全管理。在Spring Security 3.x版本中,它提供了强大的功能,包括认证、授权、访问控制以及...

    springsecurity6.x实战学习笔记,可完美的移植到生产环境

    此外,SpringSecurity还支持记住我(Remember-Me)功能,允许用户在一段时间内无需重新登录。这可以通过配置RememberMeServices并在Web安全配置中启用实现。 为了调试和日志记录,SpringSecurity提供了详细的审计和...

    Spring Security 2.0.x Sample Code

    在`springsecurity-sample`中,你将找到实际的代码实现,如配置文件、控制器、服务和DAO,展示了如何将这些概念应用于实际项目。通过对这些示例的分析和学习,你可以更好地理解和实践Spring Security 2.0.x的安全...

    spring security 3.x第五章例子

    在Spring Security 3.x版本中,这个框架提供了许多改进和新特性,旨在保护基于Spring的应用程序免受安全威胁。第五章通常会深入讲解实际应用中的具体示例,帮助开发者理解如何在项目中集成和配置Spring Security。 ...

    spring-security-3.0.5.RELEASE 官方下载

    5. **Remember Me服务**:此版本可能包含了Remember Me功能,允许用户在一段时间内无须重新登录。它通过在用户的会话中存储长期令牌来实现。 6. **集成Spring MVC**:Spring Security可以与Spring MVC无缝集成,...

    springsecurity2x.pdf

    在 "springsecurity2x.pdf" 中,主要讨论的是Spring Security 2.x版本的相关内容。 1. **Spring Security简介** - **什么是Spring Security?** 它是一个全面的安全框架,提供了认证(Authentication)和授权...

    spring-security-3.1.x.zip 源码下载

    这个"spring-security-3.1.x.zip"压缩包包含的是Spring Security 3.1版本的源代码,这对于开发者深入理解其工作原理、自定义功能或者排查问题非常有帮助。下面将详细探讨Spring Security的核心概念、主要组件以及3.1...

    SpringSecurity中文文档.zip

    本压缩包包含了两份重要的SpringSecurity中文文档,分别为“Spring Security安全权限管理手册.CHM”和“Spring Security 3.x Reference__Robin收集整理制作(fastzch@gmail.com).chm”。 “Spring Security安全权限...

Global site tag (gtag.js) - Google Analytics