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功能直接使用即可。

相关文章
|
8月前
nbcio-boot登录后首页的跟踪出现total问题修正
nbcio-boot登录后首页的跟踪出现total问题修正
37 0
|
8月前
|
JavaScript 前端开发 API
「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」
在 Web 开发中,了解页面生命周期是非常重要的。页面生命周期定义了页面从加载到卸载的整个过程,包括各种事件和阶段。在本文中,我们将详细介绍四个关键事件:DOMContentLoaded、load、beforeunload 和 unload。我们将探讨这些事件的属性、API、应用场景,并提供一些代码示例和参考资料。
jira学习案例45-捕获边界错误2
jira学习案例45-捕获边界错误2
72 0
jira学习案例45-捕获边界错误2
jira学习案例38-清除警告信息
jira学习案例38-清除警告信息
93 0
jira学习案例38-清除警告信息
|
前端开发 C++
前端hook项目moblie总结笔记-打包apk过程
前端hook项目moblie总结笔记-打包apk过程
103 0
前端hook项目moblie总结笔记-打包apk过程
jira学习案例44-捕获边界错误1
jira学习案例44-捕获边界错误1
73 0
jira学习案例44-捕获边界错误1
|
存储 安全 Java
Remember功能基本实现|学习笔记
快速学习Remember功能基本实现
Remember功能基本实现|学习笔记
|
前端开发 数据库 数据安全/隐私保护
总结项目功能特点(后台系统1)| 学习笔记
快速学习 总结项目功能特点(后台系统1)
175 0
总结项目功能特点(后台系统1)| 学习笔记
学习笔记jira项目37-用高级hook和useAsync统一处理loading和error
学习笔记jira项目37-用高级hook和useAsync统一处理loading和error
115 0
学习笔记jira项目37-用高级hook和useAsync统一处理loading和error
学习笔记jira项目35-清除前面课程输入的警告信息
学习笔记jira项目35-清除前面课程输入的警告信息
90 0
学习笔记jira项目35-清除前面课程输入的警告信息

热门文章

最新文章