目录
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要这样处理,也许是我还没搞清楚缘由,希望与各位讨论。
该问题已经在新版本中修复!!!!
相关推荐
- Spring Security提供了Remember-Me服务,允许用户在一定时间内无须重新登录。它通过存储用户凭据的哈希值在cookie中实现。此外,还可以通过自定义实现免登逻辑,例如OAuth2或JWT(JSON Web Tokens)。 7. **配置...
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....
在Spring Security 3.x版本中,它引入了许多改进和新特性,以增强应用程序的安全性。这个实例集提供了深入理解如何配置和使用Spring Security 3.x的实践指导。 1. **身份验证**:Spring Security的核心功能之一是...
2. **Authentication**:Spring Security提供了一套完整的身份验证机制,包括Remember Me服务、基于表单的登录、以及支持各种认证源如LDAP、数据库等。4.0.3版本可能包含了改进的认证流程和错误处理。 3. **...
《Spring Security 3.x 官方文档》是Java开发者学习Spring Security框架的重要参考资料,它以中文版的形式提供了全面且深入的指南。这份文档主要涵盖了Spring Security的核心概念、配置和使用方法,旨在帮助开发者...
本源码工程是针对SpringSecurity3.x的深入学习资源,包含了实现文档对应的源代码,能够帮助开发者更好地理解和运用该框架。 首先,SpringSecurity的核心概念包括认证(Authentication)和授权(Authorization)。...
- 对RememberMe服务进行了改进,增强了安全性。 总结 Spring Security通过`spring-security-core`模块提供了全面的安全管理能力,它将认证、授权、会话管理和安全配置等抽象成易于使用的组件。深入理解这个源代码...
.rememberMe().rememberMeServices(rememberMeServices()) .key("key") // 同上面的key .rememberMeParameter("remember-me") // 前端提交的参数名 .tokenRepository(persistentTokenRepository()) ....
### Spring Security 2.0.x完全中文参考文档 #### 序言 本文档旨在为用户提供一份详尽且全面的Spring Security 2.0.x版本的中文指南,它不仅覆盖了核心概念、配置方法以及实际应用案例,还深入探讨了安全框架的...
**Spring Security 3.x 快速构建企业级安全** Spring Security是Java平台上广泛使用的安全框架,主要用于企业级应用的安全管理。在Spring Security 3.x版本中,它提供了强大的功能,包括认证、授权、访问控制以及...
此外,SpringSecurity还支持记住我(Remember-Me)功能,允许用户在一段时间内无需重新登录。这可以通过配置RememberMeServices并在Web安全配置中启用实现。 为了调试和日志记录,SpringSecurity提供了详细的审计和...
在`springsecurity-sample`中,你将找到实际的代码实现,如配置文件、控制器、服务和DAO,展示了如何将这些概念应用于实际项目。通过对这些示例的分析和学习,你可以更好地理解和实践Spring Security 2.0.x的安全...
在Spring Security 3.x版本中,这个框架提供了许多改进和新特性,旨在保护基于Spring的应用程序免受安全威胁。第五章通常会深入讲解实际应用中的具体示例,帮助开发者理解如何在项目中集成和配置Spring Security。 ...
5. **Remember Me服务**:此版本可能包含了Remember Me功能,允许用户在一段时间内无须重新登录。它通过在用户的会话中存储长期令牌来实现。 6. **集成Spring MVC**:Spring Security可以与Spring MVC无缝集成,...
在 "springsecurity2x.pdf" 中,主要讨论的是Spring Security 2.x版本的相关内容。 1. **Spring Security简介** - **什么是Spring Security?** 它是一个全面的安全框架,提供了认证(Authentication)和授权...
这个"spring-security-3.1.x.zip"压缩包包含的是Spring Security 3.1版本的源代码,这对于开发者深入理解其工作原理、自定义功能或者排查问题非常有帮助。下面将详细探讨Spring Security的核心概念、主要组件以及3.1...
本压缩包包含了两份重要的SpringSecurity中文文档,分别为“Spring Security安全权限管理手册.CHM”和“Spring Security 3.x Reference__Robin收集整理制作(fastzch@gmail.com).chm”。 “Spring Security安全权限...