开发者学堂课程【Spring Security知识精讲与实战演示(二):Remember功能基本实现】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/731/detail/13044
Remember 功能基本实现
要做 remember-me 需要对源码中的要求做回复,认证页面中必须提供一个单选框来(复选框也可以checkbox),name 值必须为remember-me。Value 值有四个选择,第一个是 true,然后 on、yes、1都可以。有了这样的复选框,在用的时候需要选中再次登录。
如果不出意外会按照源码中分析的那样会在浏览器的cookie中写入remember-me 的一个 cookie 以便于下次自动登录。
在这里可以检查一下页面的部分:
现在的页面已经满足了要求,这时也可以不做任何其他的操作。先来到登录页面测试一下。先使用“小马”来认证;
发现存储里面能找到 cookie,接下来能发现当前浏览器的 cookie信息。这里面的 cookie 是非域名的。local host 下有两个 cookie。这两个没有认证都存在,可见这是所有 web 工程,页面是 jsp 就会自己加入这两个 cookie 信息。
现在先选中“记住”,不选中代表不想要这个功能。点击登录。网站后面的 favicon.ico 不用管,实际已经认证通过了,回车。
现在是已经通过的状态,但是发现并没有写入 remember-me 相关的 cookie,那么可见现在的 remember-me 还不能使用。
remember-me 要想使用需要手动开启它的过滤器。过滤器ecurity:remember-me,直接写 remember-me 也可以,当然后面也可以设置一个过期时间。Token-validity-second。先把这个配置拿过去,拿过去之后需要重启项目。重启完成之后再一次进行认证,现在回车就会发现是非登录的状态。
需要关注向下面的状态栏,先选中“记住”,然后输入用户名小马以及对应的密码。点击登录。此时发现下面的状态栏多了一个remember-me的token;
因为这个时间非常短,现在抓紧关掉试一下。可以F12先看一下发现现在的域名是不一样的,回车,发现还是可以的。
刚开始是火狐的页面,发现下面的框中没有 remember-me 这个token。这是因为 cookie 是分域名的。英文名叫 dominant。事实上可以换一个浏览器,F12 ,在出现的页面选择application,在左侧导航栏中选择 cookie。先随便输入一个页面,但是不能访问。由于没有连网,所以不能查看。dominant 翻译出来就是域名。不同域名下的 cookie 是不一样的。
在过去一段时间之后,再次重新打开浏览器,输入网址,发现登录的时候已经过期了。会发现现在的 token 还是在的,只不过是过期了。它有一个过期的时间。也有一个最后访问的时间。
上图是已经过期的访问时间。只要在过期时间内关掉浏览器再次打开它都是可用的。
再次用小马登录,切记要勾选“记住”,然后再登录。发现下面出现了remember-me。正常想要实现 remember-me 功能必须手动将浏览器关闭,不能直接点击注销,这个时候再去关闭浏览器,就不能再使用“记住”功能了。因为这个“记住”功能要求不能点击注销,注销之后 remember-me 就会消失。
以上就是 remember-me 的基本使用。