SpringBoot + Spring Security 学习笔记记住我功能实现

本文详细介绍了SpringBoot结合Spring Security实现记住我功能的原理和步骤,包括过滤器工作流程、前端checkbox设置、数据库源配置,以及源码分析中的首次和第二次请求处理。重点讲解了如何配置Cookie、存储数据库以及自动登录的实现机制。
摘要由CSDN通过智能技术生成

记住我功能的基本原理

当用户登录发起认证请求时,会通过UsernamePasswordAuthenticationFilter进行用户认证,认证成功之后,SpringSecurity 调用前期配置好的记住我功能,实际是调用了RememberMeService接口,其接口的实现类会将用户的信息生成Token并将它写入 response 的Cookie中,在写入的同时,内部的TokenRepositoryTokenRepository会将这份Token再存入数据库一份。

当用户再次访问服务器资源的时候,首先会经过RememberMeAuthenticationFiler过滤器,在这个过滤器里面会读取当前请求中携带的 Cookie,这里存着上次服务器保存 的Token,然后去数据库中查找是否有相应的 Token,如果有,则再通过UserDetailsService获取用户的信息。

记住我功能的过滤器

从图中可以得知记住我的过滤器在过滤链的中部,注意是在UsernamePasswordAuthenticationFilter之后。

前端页面checkbox设置

在 html 中增加记住我复选框checkbox控件,注意其中复选框的name 一定必须为remember-me

<input type="checkbox" name="remember-me" value="true"/> 

配置cookie存储数据库源

本例中使用了 springboot 管理的数据库源,所以注意要配置spring-boot-starter-jdbc的依赖:

<dependency>
	<groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> 

如果不配置会报编译异常:

The type org.springframework.jdbc.core.support.JdbcDaoSupport cannot be resolved. It is indirectly referenced from required .class files 

记住我的安全认证配置:

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate DataSource dataSource;@Overrideprotected void configure(HttpSecurity http) throws Exception {// 将自定义的验证码过滤器放置在 UsernamePasswordAuthenticationFilter 之前http.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class) .formLogin().loginPage("/login")	 					// 设置登录页面.loginProcessingUrl("/user/login") 			// 自定义的登录接口.successHandler(myAuthenctiationSuccessHandler).failureHandler(myAuthenctiationFailureHandler).defaultSuccessUrl("/home").permitAll()		// 登录成功之后,默认跳转的页
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值