SpringSecurity系列——记住我(remember me)day3-3(源于官网5.7.2版本)
前言
源于官方最新5.7.2文档,若你觉得官方文档阅读起来很枯燥,内容复杂,我提供了解析概括在每个部分的结尾,我对官方文档的内容做了一些改变,实例代码我会在后续进行更新,请查看如:SpringSecurity系列——认证架构实例代码的文章
但是如果你有能力,还是推荐直接阅读官方文档
remember me(记住我)
记住我或持久登录身份验证是指网站能够记住会话之间主体的身份。 这通常是通过向浏览器发送 cookie 来完成的,该 cookie 在未来的会话中被检测到并导致自动登录发生。 Spring Security 为这些操作的发生提供了必要的钩子,并且有两个具体的 remember-me 实现。 一种使用散列来保护基于 cookie 的令牌的安全性,另一种使用数据库或其他持久存储机制来存储生成的令牌。
请注意,这两种实现都需要一个 UserDetailsService. 如果您使用的身份验证提供程序不使用 UserDetailsService(例如,LDAP 提供程序)那么它将无法工作,除非您也有 UserDetailsService bean 在您的应用程序上下文中
简单基于哈希的令牌方式
这种方法使用散列来实现有用的记住我的策略。 本质上,在交互式身份验证成功后会向浏览器发送一个 cookie,该 cookie 的组成如下
base64(username + ":" + expirationTime + ":" +
md5Hex(username + ":" + expirationTime + ":" password + ":" + key))
username: As identifiable to the UserDeta