温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何实现SpringSecurity rememberme功能

发布时间:2021-05-23 16:36:01 来源:亿速云 阅读:236 作者:小新 栏目:编程语言

小编给大家分享一下如何实现SpringSecurity rememberme功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

功能原理分析

如何实现SpringSecurity rememberme功能

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

如何实现SpringSecurity rememberme功能

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

如何实现SpringSecurity rememberme功能

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

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

如何实现SpringSecurity rememberme功能

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

如何实现SpringSecurity rememberme功能

先测试一下,认证通过后,关掉浏览器,再次打开页面,发现还要认证!为什么没有起作用呢?
这是因为remember me功能使用的过滤器RememberMeAuthenticationFilter默认是不开启的!

开启remember me过滤器

<security:remember-me token-validity-seconds="60"></security:remember-me>

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

如何实现SpringSecurity rememberme功能

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

如何实现SpringSecurity rememberme功能

以上是“如何实现SpringSecurity rememberme功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI