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月前
|
运维 监控 BI
15 分钟快速上手 Odoo
Odoo 是一款备受企业青睐的开源 ERP 系统,但传统基于 Docker 的部署方式存在安装复杂、镜像拉取困难、配置繁琐及管理不便等问题。Websoft9 提供了一键部署方案,通过云原生应用模板和自动化运维工具,用户可在 15 分钟内快速上手 Odoo,享受零门槛、极速交付与自动化运维体验。本文还深度体验了 Odoo 的核心功能模块,如 CRM 智能客户管理、项目管理敏捷协作、库存精准控制及报表零代码定制等功能,助力企业高效开启数字化转型之旅。
290 5
|
7月前
|
存储 人工智能 搜索推荐
|
Unix 索引
生信教程 | 基于PSMC估计有效群体大小
生信教程 | 基于PSMC估计有效群体大小
|
存储 自然语言处理 机器人
揭秘LangChain超能力:一键解锁与多元语言模型的梦幻联动,打造前所未有的智能对话体验!
【10月更文挑战第7天】LangChain是一个开源框架,旨在简化应用程序与大型语言模型(LLM)的交互。它提供抽象层,使开发者能轻松构建聊天机器人、知识管理工具等应用。本文介绍如何使用LangChain与不同语言模型交互,涵盖安装、环境设置、简单应用开发及复杂场景配置,如文档处理和多模型支持。
249 3
|
人工智能 供应链 算法
SWOT分析法:知彼知己的战略规划工具
SWOT分析法是一种用于评估组织、项目、个人或任何其他事物的战略规划工具。SWOT是Strengths(优势)、Weaknesses(劣势)、Opportunities(机会)和Threats(威胁)的缩写。通过分析这四个方面,SWOT分析法可以帮助决策者了解当前情况,并为未来的行动制定策略。
1133 0
SWOT分析法:知彼知己的战略规划工具
|
数据安全/隐私保护
如何配置战斧指纹浏览器和IPXProxy海外代理IP?
通过代理IP,用户可以轻松绕过地域限制,访问全球范围内的网站和服务。特别是对于跨境用户来说,需要在目标市场投放广告,而代理IP能帮助实现精准投放,快速的提升品牌或者店铺的知名度。那如何在如何在战斧指纹浏览器中设置IPXProxy海外代理IP?
463 0
|
Linux 网络安全 文件存储
本地部署Jellyfin影音服务器 - 公网远程影音库
随着移动智能设备的普及,各种各样的使用需求也被开发出来,从最早的移动听音乐、看图片(MP3时代),到之后的移动视频需求(MP4时代)到现在的移动流媒体需求(智能手机看视频)。但当我们习惯这些需求后,忽然发现自己不知不觉间成了待割的韭菜(3台设备就要加钱)。作为一颗倔强的韭菜,自然不会甘愿被割,因此打算自建一个私人影音媒体平台。现在,笔者就向大家展示,使用cpolar内网穿透+ Jellyfin,自建私人影音平台的全过程。
|
NoSQL Java 数据库
【SpringBoot】简述springboot项目启动数据加载内存中的三种方法
【SpringBoot】简述springboot项目启动数据加载内存中的三种方法
485 0
|
人工智能 数据挖掘 API
iOS MachineLearning 系列(20)—— 训练生成CoreML模型
本系列前面的文章详细的介绍了在iOS中与AI能力相关的API的使用,也介绍了如何使用训练好的CoreML模型来实现更强大的AI能力。然而,无论是成熟的API提供的能力,还是各种各样的三方模型,有时候都并不能满足某一领域内的定制化需求。当我们拥有很多的课训练数据,且需要定制化的AI能力时,其实就可以自己训练生成CoreML模型,将此定制化的模型应用到工程中去。
771 0
iOS MachineLearning 系列(20)—— 训练生成CoreML模型
Python 报错AttributeError: ‘str‘ object has no attribute ‘decode‘解决办法
Python 报错AttributeError: ‘str‘ object has no attribute ‘decode‘解决办法