Spring Security实现自动登录的基本流程是,在第一次登录成功时将相关用户凭证及相关自动登录所需信息保存起来,在下次未登录访问受限资源时,会从中取出相关信息进行验证来实现自动登录的效果。
Spring Security除了提供将用户凭证信息存储在Cookie以便下次登录时进行自动登录的方式外,还支持将相关用户凭证信息及自动登录所需信息存储在持久化存储中的方式,这里的持久化存储可以在内存中,可以在外部文件中,也可以在数据库中,实现不同方式的持久化存储都需要实现PersistentTokenRepository接口,里面定义了创建凭证,删除凭证,修改凭证的相关方法,默认的RememberMeServices中使用的是InMemoryTokenRepository类,这个类的作用是将自动登录相关信息放置在内存中。
在这里我使用数据库存储自动登录相关用户凭证及相关信息的方式,不需要任何的代码,只需要进行简单的配置就可达到这样的效果,因为Spring Security已经为我们提供了这样的类,类名为JdbcTokenRepositoryImpl, 查看该类的源码会发现,该类包含了创建持久化登录信息的表语句,还有插入,修改,删除语句。
<beans:bean id="rememberMeServices"
class="org.springframework.security.web.authentication.rememberme.PersistentTokenBasedRememberMeServices">
<beans:property name="key" value="ZhongGang"/>
<beans:property name="parameter" value="rememberMe"/>
<beans:property name="cookieName" value="rememberMe"/>
<beans:property name="userDetailsService" ref="userService"/>
<beans:property name="tokenRepository" ref="tokenRepository"/>
</beans:bean>
<beans:bean id="tokenRepository"
class="org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl">
<beans:property name="createTableOnStartup" value="true"/>
<beans:property name="dataSource" ref="dataSource"/>
</beans:bean>
tokenRepository bean这里定义的是数据库存储的方式,如果不在rememberMeServices中设置tokenRepository,那么默认使用的内在的存储方式,也就是默认实现的是InMemoryTokenRepositoryImpl类, 其它属性的设置和之前的基于Cookie的自动登录方式一样,当然还有其它诸如凭证的有效期限等设置值,这根据需求的不同而有所不同。
这是建表相关语句
create table persistent_logins (username varchar(64) not null, series varchar(64) primary key, " +
"token varchar(64) not null, last_used timestamp not null)
这些语句都可以在JdbcTokenRepositoryImpl源码中发现, 因为Spring Security没有为这些语句提供设置方法, 所以如果想要使用自己的表和增删改查语句,需要继承这个类自己添加方法。
这里除了tokentRepository和rememberMeServices的设置不同外,其它部分和前一章的没有不同之处。
分享到:
相关推荐
在"Spring Security 3多用户登录实现之七 用户验证失败处理改进"这个主题中,我们将探讨如何优化Spring Security的用户验证流程,以提高用户体验和系统安全性。 1. **用户验证流程**: Spring Security的认证过程...
本项目结合了SpringBoot、SpringSecurity以及JPA(Java Persistence API),实现了用户角色权限的登录认证功能。以下是关于这些技术及实现过程的详细讲解。 1. **SpringBoot**:SpringBoot简化了Spring应用的初始...
在Spring Security中,用户信息通常存储在一个持久化的数据源中,如数据库。通过UserDetailsService接口,我们可以自定义实现来加载用户信息。用户与角色之间的关系通常通过用户角色表来建立,而角色则赋予了用户...
**Spring Security 用户权限项目概述** Spring Security 是一个强大的安全框架,专为 Java 应用程序设计,用于处理身份验证和授权。在这个项目中,它被用来实现用户权限管理,确保只有授权的用户才能访问特定的资源...
如果需要实现“记住我”功能,可以配置`RememberMeServices`,它会在用户登录时生成一个持久化的令牌,并将其保存在客户端(如Cookie)。下次用户访问时,如果没有提供凭证,Spring Security会检查这个令牌并自动...
它使用了`SessionRepositoryFilter`,可以支持各种持久化存储,如Redis、MongoDB等。 为了实现这个功能,我们需要以下步骤: 1. **添加依赖**:在`pom.xml`中添加Spring Security、MySQL驱动和相应session共享技术...
它通过存储用户的持久化令牌来实现这一功能,增加了用户体验。 5. **Session Management**: Spring Security提供了会话管理功能,包括会话固定防护(Session Fixation Protection)和会话超时检测,防止会话劫持和...
如果需要实现“记住我”功能,可以使用CookieTokenRepository或者MemoryTokenRepositoryImpl,存储用户的持久化登录信息。 11. **异常处理** 配置全局的AccessDeniedHandler和AuthenticationEntryPoint,处理未...
实现这一功能,我们需要在配置中启用remember-me服务,设置密钥,然后Spring Security会生成一个持久化的令牌存储在用户的cookie中。当用户下次访问时,如果没有提供有效的凭证,Spring Security会检查这个cookie并...
默认实现是基于内存的UserDetailsService,但可以根据需求配置数据库或其他持久化存储。认证流程通常包含以下步骤:用户提交凭证 -> Spring Security验证 -> 创建Authentication对象并存储在SecurityContext中。 **...
4. **UserDetailsService**:这是SpringSecurity获取用户信息的接口,通常与数据库或其他持久化存储配合,用于加载用户及其角色。 5. **Role-Based Access Control (RBAC)**:RBAC是一种常用的权限模型,Spring...
Spring Security 实现记住我下次自动登录功能过程详解 Spring Security 是一个功能强大且广泛使用的 Java 认证和授权框架,提供了许多功能强大的功能,例如认证、授权、RememberMe 等。在本文中,我们将详细介绍...
它使用安全的哈希算法存储持久化的用户会话信息。 7. **OAuth2集成**:Spring Security 3.2.6开始支持OAuth2,这使得应用能够与其他OAuth2兼容的服务进行安全的授权交互,例如社交登录或第三方API访问。 8. **国际...
这个功能通过`PersistentTokenBasedRememberMeServices`实现,它可以存储在数据库中的持久化令牌来识别用户。 6. **登录与退出流程** 用户通过`UsernamePasswordAuthenticationFilter`进行登录尝试,如果成功,...
总的来说,这个项目展示了如何利用Spring Boot、Shiro和MyBatis的集成,实现一个功能完善的权限管理系统,为不同用户提供定制化的菜单权限,提高了系统的安全性与用户体验。在实际开发中,这样的架构可以广泛应用于...
在"Spring Security学习之路"这个主题中,我们将深入探讨如何使用这个框架来实现登录界面和其他安全相关的功能。 首先,Spring Security的核心是为应用程序提供认证(Authentication)和授权(Authorization)服务...
- 实现基于Cookie的自动登录策略。 - **示例代码**: 在`spring-security.xml`中配置持久化策略。 **17. 匿名登录** - **17.1 配置文件** - 在配置文件中启用匿名登录功能。 - **示例代码**: 在`spring-...