SpringSecurity rememberme功能实现过程解析

网友投稿 532 2023-06-21

SpringSecurity rememberme功能实现过程解析

SpringSecurity rememberme功能实现过程解析

记住我功能原理分析

还记得前面咱们分析认证流程时,提到的记住我功能吗?

现在继续跟踪找到AbstractRememberMeServices对象的loginSuccess方法:

再点进去上面if判断中的rememberMeRequested方法,还在当前类中:

如果上面方法返回true,就表示页面勾选了记住我选项了。

继续顺着调用的方法找到PersistentTokenBasedRememberMeServices的onLoginSuccess方法:

注意name和value属性的值不要写错哦!

先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢?

这是因为remember me功能使用的过滤器RememberMeAuthenticationFilter默认是不开启的!

开启remember me过滤器

说明:RememberMeAuthenticationFilter中功能非常简单,会在打开浏览器时,自动判断是否认证,如果没有则

调用autoLogin进行自动认证。

remember me 安全性分析

记住我功能方便是大家看得见的,但是安全性却令人担忧。因为 Cookie毕竟是保存在客户端的,很容易盗取,而且

cookie的值还与用户名、密码这些敏感数据相关,虽然加密了,但是将敏感信息存在客户端,还是不太安全。那么

这就要提醒喜欢使用此功能的,用完网站要及时手动退出登录,清空认证信息。

此外,SpringSecurity还提供了remember me的另一种相对更安全的实现机制 :在客户端的cookie中,仅保存一个

无意义的加密串(与用户名、密码等敏感数据无关),然后在db中保存该加密串-用户信息的对应关系,自动登录

时,用cookie中的加密串,到db中验证,如果通过,自动登录才算通过。

持久化remember me信息

创建一张表,注意这张表的名称和字段都是固定的,不要修改。

data-source-ref="dataSource"

remember-me-parameter="remember-me">

data-source-ref="dataSource"

remember-me-parameter="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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring Security常用过滤器实例解析
下一篇:SpringSecurity的防Csrf攻击实现代码解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~