SpringSecurity的rememberme
记住我功能原理分析
还记得前面咱们分析认证流程时,提到的记住我功能吗?
现在继续跟踪找到AbstractRememberMeServices对象的loginSuccess方法:
再点进去上面if判断中的rememberMeRequested方法,还在当前类中:
如果上面方法返回true,就表示页面勾选了记住我选项了。
继续顺着调用的方法找到PersistentTokenBasedRememberMeServices的onLoginSuccess方法:
注意name和value属性的值不要写错哦!
先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢?
这是因为remember me功能使用的过滤器RememberMeAuthenticationFilter默认是不开启的!
开启remember me过滤器
<security:remember-me token-validity-seconds="60"></security:remember-me>
说明:RememberMeAuthenticationFilter中功能非常简单,会在打开浏览器时,自动判断是否认证,如果没有则
调用autoLogin进行自动认证。
remember me 安全性分析
记住我功能方便是大家看得见的,但是安全性却令人担忧。因为 Cookie毕竟是保存在客户端的,很容易盗取,而且
cookie的值还与用户名、密码这些敏感数据相关,虽然加密了,但是将敏感信息存在客户端,还是不太安全。那么
这就要提醒喜欢使用此功能的,用完网站要及时手动退出登录,清空认证信息。
此外,SpringSecurity还提供了remember me的另一种相对更安全的实现机制 :在客户端的cookie中,仅保存一个
无意义的加密串(与用户名、密码等敏感数据无关),然后在db中保存该加密串-用户信息的对应关系,自动登录
时,用cookie中的加密串,到db中验证,如果通过,自动登录才算通过。
持久化remember me信息
创建一张表,注意这张表的名称和字段都是固定的,不要修改。
<security:remember-me token-validity-seconds="60" data-source-ref="dataSource" remember-me-parameter="remember-me"></security:remember-me>
CREATE TABLE `persistent_logins` ( `username` varchar(64) NOT NULL, `series` varchar(64) NOT NULL, `token` varchar(64) NOT NULL, `last_used` timestamp NOT NULL, PRIMARY KEY (`series`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
相关文章
- JavaWeb-SpringSecurity使用短信验证码登陆
- JavaWeb-SpringSecurity记住我功能
- JavaWeb-SpringSecurity图片验证ImageCode
- JavaWeb-SpringSecurity自定义登陆配置
- JavaWeb-SpringSecurity实现需求-判断请求是否以html结尾
- JavaWeb-SpringSecurity自定义登陆页面
- JavaWeb-SpringSecurity在数据库中查询登陆用户
- JavaWeb-SpringSecurity初认识
- springboot,springSecurity中POST请求404
- boke练习: springboot整合springSecurity出现的问题,传递csrf
- boke练习: springboot整合springSecurity出现的问题,post,delete,put无法使用
- 【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题
- 【异常】SpringSecurity登录失败:Full authentication is required to access this resource
- 详解比springSecurity和shiro更简单优雅的轻量级Sa-Token框架,比如登录认证,权限认证,单点登录,OAuth2.0,分布式Session会话,微服务网关鉴权
- SpringSecurity是如何玩弄过滤器链的
- SpringSecurity坑
- 【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题
- 【异常】SpringSecurity登录失败:Full authentication is required to access this resource
- 基于SpringCloud+redis+Springsecurity实现的微信小程序外卖系统