Remember 功能源码跟踪|学习笔记

简介: 快速学习 Remember 功能源码跟踪

开发者学堂课程【Spring Security知识精讲与实战演示(二):Remember功能源码跟踪】学习笔记与课程紧密联系,让用户快速学习知识

课程地址https://developer.aliyun.com/learning/course/731/detail/13043


Remember 功能源码跟踪

 

记住功能,就是 Remember me 这个功能。

在登录页面 login,jsp 中下面有一个按钮“记住”。此功能也不是很陌生,在使用其他很多网站的时,登录的时候都会有“记住 下次自动登录”这样的操作。只要选中,在下一次登录的时候就会自动登录。

ITCAST 也提供了这样的功能,使得使用起来十分便捷。主要依靠过滤器实现功能。过滤器默认并没有开启,现在需要手动开启,开启完成之后剩下的这些顺着网站要求去做即可。

网站是如何要求做的,查看源码是如何做的。首先找到登录的时候主要负责的处理器:usernamepassword 下图第一个:

image.png

这个连接是主要做认证的处理器,做认证的处理器不需要看认证的过程,因为认证的过程已经看过了,主要看认证成功之后主要做什么。

认证成功之后的操作在当前过滤器的附过滤器中。

image.png

点击附过滤器,往下找,找到叫 successfulauthentication

image.png

上图标蓝的部分就是认证成功之后操作。成功之后可以看到首先是将用户的信息:authresult 得到的结果,放入到 security 自己的容器叫 securitycontext。

此 securitycontext 容器是如何得到的?通过一个叫securitycontextholder.getcontext 这个对象就可以得到这个容器。

相当于将这个文件放在这个容器中也可以理解为放在了 set 中。

Remember me services. loginsuccess 这个就是 rememberme 操作成功之后的做法。

点击 loginsuccess,到 loginsuccess 前是一个接口。先找到时间类:

image.png 

有两个时间类,上面的是操作要 rememberme,下面是不用 rememberme。选择上面的时间类。

到这个里面会做一步判断:!This remember Me Requested(request,this parameter).这一步判断中的 re quest 不陌生,就是 Http servlet request 的阈。后面的 parameter 点进去发现是 remember-me。

image.png

Remember me是一个固定的值,不能写错,是很有用的。

再次回到刚刚的方法中,对两个值往下传。看一下判断中的逻辑!This remember Me Requested(request,this parameter).是如何写的。点击进去:

image.png

点击进去要切记parameter的值是remember me,注意不要写错。

如上图,在此过程中需要做一个判断:parameter就是字符串remember-me得到了一个值。Request getparameter(parameter)大家都可以看懂,就相当于remember-me是一个内部属性。通过内部值可以得到对应的值。得到值之后会来一堆判断

可以输入ture也可以输入on也可以输入yes也可以输入“1”.

)||这是或者操作的符号。上述任意的表达都可以,都会返回一个true。

如果不是会返回false打回,指的是选中了但是里面的值没有写对,所以这时候也不会进行remember-me操作。

只有在登录页面勾选“记住”这个框而且值也选对了后台才会操作。

在对应的页面看一下,找到登录页面login,jsp,找到记住功能对应的对话框,name不能乱输入,一定要要输入“remember-me”,刚刚已经翻译源码。如果不写“remember-me”,上来request get parameter 第一步就拿不到数据。那后面就会是一个空,上来就是错了,就会出现null值。

第二步在value值一定要写成后面任意其中一种。输入“true、on、yes、1”都可以,但是一定要写,不写下面的是不能够通过的。只要按照要求去做了,继续点到实验类中会发现:后面如果是false,就会回复this logger debug(0:“remember-me login not requested.”);如果里面是true,就会进到else。

接下来看else做了什么:点击onloginsuccess,又需要一个实验类,点击进去,选择第一个。发现只要勾选了remember-me,并且是按照规则勾选的(有一个单选框,name值写remember-me,值写true、on、yes、1都可以)

image.png

就会发现后面会将生成token,将token向数据库里面一份,repository是持久化的意思。而且会向cook中加一份。

有了以上内容在再一次登录的时候的就会判断是否有值,有值就会自动登录。如果没有值就不会登录。

登录的地址在浏览器的cookie中放,不要听cookie,有了cookie就不好使了。如有了cookie,就只能持久化到数据库中了。

以上就是对persistentrememberme的底层原理的讲解,梳理底层原理一定要记得一个结论就是remember-me中的name值必须叫remember-me,值就是true、on、yes、1四个中的任意一个。只要按照以上操作执行,接下来就可以开启remember-me功能直接使用即可。

相关文章
|
3月前
|
数据采集 监控 数据安全/隐私保护
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
在Selenium Web数据采集时,日志管理至关重要。通过调整`–log-level`参数可优化日志详细度,如设置为`INFO`记录一般操作信息。结合代理IP、Cookie及user-agent配置,不仅能提高采集成功率,还能规避反爬机制。合理选择日志级别有助于调试与性能平衡,在复杂的数据采集任务中保持程序稳定与可控。
123 1
掌握Selenium爬虫的日志管理:调整–log-level选项的用法
jira学习案例38-清除警告信息
jira学习案例38-清除警告信息
81 0
jira学习案例38-清除警告信息
学习笔记jira项目37-用高级hook和useAsync统一处理loading和error
学习笔记jira项目37-用高级hook和useAsync统一处理loading和error
106 0
学习笔记jira项目37-用高级hook和useAsync统一处理loading和error
学习笔记jira项目35-清除前面课程输入的警告信息
学习笔记jira项目35-清除前面课程输入的警告信息
82 0
学习笔记jira项目35-清除前面课程输入的警告信息
学习笔记jira项目36-给页面添加loading和error状态
学习笔记jira项目36-给页面添加loading和error状态
73 0
学习笔记jira项目36-给页面添加loading和error状态
|
JSON JavaScript 网络架构
nf-Press —— 在线文档也可以加载组件和编写代码
上一篇 juejin.cn/post/707482… 介绍了一下基本功能,这里介绍一下关于代码方面的功能
183 0
nf-Press —— 在线文档也可以加载组件和编写代码
Carbon--又一个保存代码利器
简介:Carbon--又一个保存代码利器