Spring Security-记住我的实现原理

Spring Security 5.7.5版本

RememberMeAuthenticationFilter.doFilter方法包含了核心逻辑。

RememberMeAuthenticationFilter在UsernamePasswordAuthenticationFilter之后执行。

  • SecurityContextHolder获取的Authenticationnull时,会执行rememberMeServices.autoLogin(request,response)方法获取Authentication对象。
  • autoLogin默认的实现类是AbstractRememberMeServices
  1. 首先将remember-me cookie做base64解码后以:分隔成字符串数组,再进行URLDecode。
  2. 执行子类的processAutoLoginCookie(cookieTokens,request,response)方法获取UserDetails对象。
  3. 封装成Authentication对象
  • processAutoLoginCookie的实现类有两个,TokenBasedRememberMeServices和PersistentTokenBasedRememberMeServices。
  1. TokenBasedRememberMeServices.processAutoLoginCookie方法。这个类只在浏览器存储一个名为remember-me的cookie。cookie字符串数组的数量应为3,分别是username, expireTime, signature[base64(username + ":" + expiryTime + ":" + Md5Hex(username + ":" + expiryTime + ":" + password + ":" + key))]。根据用户名调用UserDetailServices.loadUserByUsername方法查询UserDetails,生成签名并与cookie的签名值比较,如果匹配则返回UserDetails对象,否则抛出InvalidCookieException异常。
  2. PersistentTokenBasedRememberMeServices.processAutoLoginCookie方法。这个类除在浏览器存储一个名为remember-me的cookie外,还会将series,token值存储到实际的数据库中。cookie字符串数组的数量应为2,分别是seriestoken。根据series调用tokenRepository.getTokenForSeries方法,比较token,如果匹配则调用UserDetailService.loadUserByUsername方法返回UserDetails对象,否则删除数据库的记录并抛出CookieTheftException

自己的码云spring-security练习项目,成功接入了GitHub,欢迎访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/63736.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【软件测试面试题】测试理论/基础面试(持续更新)

Hi,大家好。最近很多朋友都在说今年的互联网行情不好,面试很难,不知道怎么复习,我最近总结了一份在软件测试面试中比较常见的测试理论/基础面试面试题合集,希望对大家有帮助。建议点赞收藏再阅读,防止丢失&…

渗透测试学习笔记(二)kali相关

一.kali 基础工具 NetCat -网络工具中的瑞士军刀:允许用户通过 TCP 或 UDP 协议发送和接收数据。WireShark-开源抓包软件TCPdump-命令行抓包分析工具 二. 被动信息收集 2.1 被动信息收集指从公开渠道获取信息,主要是已经公开的信息。 要点&#xff1…

在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践20241208

🛠️ 在 Windows WSL 上部署 Ollama 和大语言模型:从镜像冗余问题看 Docker 最佳实践 ⭐ 引言 随着大语言模型(LLM)和人工智能技术的迅猛发展,开发者们越来越多地尝试在本地环境中部署模型进行实验。 但部署过程中常…

《人工智能安全:挑战与破局之路》

《人工智能安全:挑战与破局之路》 一、人工智能安全现状二、人工智能安全面临的挑战(一)技术层面的挑战(二)伦理与社会层面的挑战 四、人工智能安全未来发展趋势(一)技术创新引领发展&#xff0…

ContOS7安装完成后的一系列问题

问题1&#xff1a;constos7,安装完后&#xff0c;无法使用yum,导致无法安装任何东西&#xff0c; 解决&#xff1a;原因是国外的镜像地址有问题&#xff0c;改为国内的地址。 查看yum的状态 yum repolist 2.执行如下命令&#xff0c;更换yum源 bash <(curl -sSL https://…

使用JavaScrip和HTML搭建一个简单的博客网站系统

搭建一个简单的博客网站系统&#xff0c;我们需要创建几个基本的页面和功能&#xff1a;登录、注册、文章发布等。这里我们先实现一个基础版本&#xff0c;包括用户登录、注册以及文章发布的功能。由于这是一个简化版的示例&#xff0c;我们将所有逻辑集成在一个HTML文件中&…

跨域 Cookie 共享

跨域请求经常遇到需要携带 cookie 的场景&#xff0c;为了确保跨域请求能够携带用户的认证信息或其他状态&#xff0c;浏览器提供了 withCredentials 这个属性。 如何在 Axios 中使用 withCredentials 为了在跨域请求中携带 cookie&#xff0c;需要在 Axios 配置中设置 withCr…

一些前端组件介绍

wangEditor &#xff1a; 一款开源 Web 富文本编辑器&#xff0c;可用于 jQuery Vue React等 https://www.wangeditor.com/ Handsontable&#xff1a;一款前端可编辑电子表格https://blog.csdn.net/carcarrot/article/details/108492356mitt&#xff1a;Mitt 是一个在 Vue.js 应…

车载以太网-UDPNM

文章目录 UDPNM定义在车载以太网中的作用网络节点状态监测唤醒和睡眠管理网络拓扑发现工作流程消息发送消息接收与处理与其他车载网络协议的比较和协作UDPNM的工作原理是什么?1.消息构建与发送原理消息格式构建发送机制2.消息接收与响应原理接收过程响应机制3.状态管理与定时器…

JavaScript操作数组

push 向数组的 末尾 添加一个或多个元素&#xff0c;并返回新数组的长度。 语法&#xff1a;array.push(element1, element2, ..., elementN) const arr [1, 2, 3]; const newLength arr.push(4, 5); // 添加 4 和 5 console.log(arr); // [1, 2, 3, 4, 5] console.…

Ubuntu防火墙管理(六)——ARP防火墙过滤防御自定义系统服务

起因 在ubuntu24.04中检查arp表&#xff0c;输出异常 arp -a? (10.162.242.142) 位于 74:3a:20:b9:e8:02 [ether] 在 wlp2s0 ? (10.162.0.1) 位于 在 wlp2s0 ubuntu环境中&#xff0c;这是否表示ARP攻击&#xff0c;本地网关为10.162.0.1&#xff0c;可用arptables防御吗&a…

uniapp扭蛋机组件

做了一个uniapp的扭蛋机组件&#xff0c;可以前往下载地址下载 仅测试了vue2、3、h5页面微信小程序&#xff0c;理论支持全平台 使用方法简单&#xff0c;具有待机动效、抽奖中动效、掉落奖品动效&#xff0c;可以替换奖品图片&#xff0c;足以满足大部分抽奖页面需求。 示例图…

C#实现一个HttpClient集成通义千问-开发前准备

集成一个在线大模型&#xff08;如通义千问&#xff09;&#xff0c;来开发一个chat对话类型的ai应用&#xff0c;我需要先了解OpenAI的API文档&#xff0c;请求和返回的参数都是以相关接口文档的标准进行的 相关文档 OpenAI API文档 https://platform.openai.com/docs/api-…

用JavaScript实现一个贪吃蛇游戏

原理如下&#xff0c;贪吃蛇的蛇身就是一个数组&#xff0c;数组中的每个元素都是一个坐标&#xff0c;蛇身每次移动时都会在数组前插入一个新坐标&#xff0c;并在数组尾部删掉一条记录&#xff0c;吃到食物后数组的尾部记录就不删。如果移到屏幕边缘会从屏幕的另一边出现。好…

Unity RectTransUtility工具类

这个工具主要是用于动态生成UI的情况。项目中我们通过配置UI的锚点、位置以及大小(位置、大小都是通过蓝湖看到的)&#xff0c;然后通过代码动态生成UI。 大部分情况下只要合理设置锚点&#xff0c;那么生成出来的UI就已经满足了适配的要求。 using UnityEngine;public static…

红日靶场vulnstack 4靶机的测试报告[细节](一)

目录 一、测试环境 1、系统环境 2、注意事项 3、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、漏洞利用Getshell ①Struts 2 s2-045漏洞 手工利用s2-45漏洞 Msf综合利用 ②Tomcat框架(CVE-2017-12615) ③phpMyAdmin(CVE-2018-12613) 构造语句写入冰蝎木…

Springboot使用纪要

一、配置文件的加载顺序 1、不同配置文件类型的加载顺序 springboot支持三种类型的配置文件 .yml .yaml .properties当这三种配置文件处于同一目录下时&#xff0c;springboot会优先加载properties文件&#xff0c;如果.properties文件和.yml文件都有某一配置&#xff0c;而…

Unity协程机制详解

Unity的协程&#xff08;Coroutine&#xff09;是一种异步编程的机制&#xff0c;允许在多个帧之间分割代码的执行&#xff0c;而不阻塞主线程。与传统的多线程不同&#xff0c;Unity的协程在主线程中运行&#xff0c;并不会开启新的线程。 什么是协程&#xff1f; 协程是一种…

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题

electron 打包 webview 嵌入需要调用电脑摄像头拍摄失败问题 这篇文章是接我cocos专栏的上一篇文章继续写的&#xff0c;我上一篇文章写的是 cocos 开发触摸屏项目&#xff0c;需要嵌入一个网页用来展示&#xff0c;最后通过 electron 打包成 exe 程序&#xff0c;而且网页里面…

Android 开发者选项-模拟辅助显示设备

目录 概述使用开关的代码实现方式系统部分的处理:参考 概述 在Android开发中&#xff0c;模拟辅助显示设备通常指的是通过Android开发者选项来设置的一种虚拟显示设备&#xff0c;它允许开发者在一个设备上模拟另一个设备的显示特性。这种功能对于测试应用程序在不同屏幕尺寸、…