Spring Boot Security记住我源码分析
2021/8/7 9:06:18
本文主要是介绍Spring Boot Security记住我源码分析,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Spring Security记住我功能实现及源码分析
原创2021-04-07 08:30·FastCoder环境:Spring Boot 2.2.11.RELEASE
请先阅读《Spring Boot Security防重登录及在线总数 》,《Springboot Security 基础应用 (1) 》
相关配置
- Security配置
@Resource private DataSource dataSource ; // 这里配置持久化登录token @Bean public PersistentTokenRepository persistentTokenRepository() { JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl(); tokenRepository.setDataSource(dataSource) ; return tokenRepository; }
- SQL脚本
进入JdbcTokenRepositoryImpl中将其中的CREATE_TABLE_SQL语句复制出来执行下。
- HttpSecurity配置
http.rememberMe() .tokenRepository(persistentTokenRepository()) .userDetailsService(userDetailsService()) // 记住我功能有效期内,用来查询用户详细信息的UserDetailsService .tokenValiditySeconds(1800) ; // token有效期
- 登录页面
<div class="c-row" style="height: auto;"> <input type="checkbox" class="checkbox-control" id="remember-me" name="remember-me"/><label for="remember-me">记住我</label> </div>
注意这里的checkbox的name属性值必须是“remember-me”。
这样就可以实现记住我功能了。只要在token有效期内,每次打开页面都不需要重新登录了。
- 测试
登录后,关闭浏览器重写再打开页面不需要重新登录,同时查看数据表如下:
源码分析
我们从第一次登录开始
1.1 首先进入的
UsernamePasswordAuthenticationFilter过滤器,进入父类(AbstractAuthenticationProcessingFilter)的doFilter方法中。
直接进入登录成功的方法
1.2 执行successfulAuthentication方法
successfulAuthentication(request, response, chain, authResult);
1.3 进入loginSuccess方法
进入
AbstractRememberMeServices类中的loginSuccess方法
1.4 执行子类
PersistentTokenBasedRememberMeServices中的onLoginSuccess方法。
这里的tokenRepository就是我们上面配置的
接着我们看再次打开浏览器后是如何实现免登录的。
1.1 首先执行
RememberMeAuthenticationFilter的doFilter方法
这个过滤器是只有你开启了记住我功能才会生效的。
从当前Security上下文中获取对象,获取不到通过remeberMeService自动登录
1.2 执行
AbstractRememberMeServices中的autoLogin方法
执行extractRememberMeCookie方法获取cookie中的remember-me信息
1.3 执行processAutoLoginCookie方法
这里解析出来的信息已经和数据库中对应上了。这样就可以拿到username了。
1.4 接下来执行一些判断token是否过期和更新token有效期
1.5 根据查询出来的username查询用户信息
return getUserDetailsService().loadUserByUsername(token.getUsername());
1.6 最后将用户信息存储到Security的上下文中
完毕!!!
给给个关注+转发呗谢谢
完毕
这篇关于Spring Boot Security记住我源码分析的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-06小米11i印度快充版ROM合集:极致体验,超越期待
- 2024-10-06【ROM下载】小米11i 5G 印度版系统, 疾速跃迁,定义新速度
- 2024-10-06【ROM下载】小米 11 青春活力版,青春无极限,活力全开
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求