网站首页 > 技术文章 正文
环境: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的上下文中
完毕!!!
给给个关注+转发呗谢谢
猜你喜欢
- 2024-09-29 Spring Security 自定义登录过程(非前后端分离版本)
- 2024-09-29 基于spring-security图形验证码、token验证
- 2024-09-29 10分钟上手SpringSecurity 框架(3)
- 2024-09-29 SpringBoot 实现自动登录时的安全风险控制
- 2024-09-29 springboot+security框架整合 springboot security详解
- 2024-09-29 时序图说明JWT用户认证及接口鉴权的细节
- 2024-09-29 Spring Security 整合OAuth2 springsecurity整合oauth2+jwt+vue
- 2024-09-29 有关springboot + spring security的思考
- 2024-09-29 SpringSecurity之自定义用户权限信息的存取
- 2024-09-29 你还不了解SpringSecurity吗?快来看看SpringSecurity实战总结
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)