SpringSecurity6 | 问题答疑

news2024/11/24 7:51:13

在这里插入图片描述
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉
🍎个人主页:Leo的博客
💞当前专栏: Java从入门到精通
✨特色专栏: MySQL学习
🥭本文内容:SpringSecurity6 | 问题答疑
🖥️个人小站 :个人博客,欢迎大家访问
📚个人知识库: Leo知识库,欢迎大家访问

学习参考 :

  • 讲师:孙帅老师
  • 课程:孙哥说SpringSecurity6

image-20231030235443828

✨✨ 粉丝福利订阅✨✨

在这里插入图片描述
Leo哥收集了一些关于面试以及其他学习资源,这里分享给大家,各位卷王快收下吧!!!

目录

    • 1.前言
    • 2.问题引出
    • 3.问题1
    • 4.问题2
    • 5.参考文献
    • 6.总结

1.前言

大家好,我是Leo哥🫣🫣🫣,今天又是元气满满的周一,大家摸鱼快乐。就在我刚打开电脑的时候,后台私信就看到一条信息,看到了有一位粉丝朋友问了两个有关于SpringSecurity相关的两个问题。具体是啥呢,咱们接下来一步一步看哈。好了,话不多说让我们开始吧😎😎😎。

2.问题引出

相关问题我这里已经进行了截图,大家可以参考一下,这两个问题你是否可以答出来呢,对于这两个问题你是否还有其他思考呢。

image-20231120103820200

好了,我们简单思考一下,就跟着Leo哥视角一起去研究一下这两个问题吧。

3.问题1

假如已经登录过, 下一次请求到达时,是不是 过滤器 SecurityContextHolderFilter用于恢复 SecurityContext 对象,以保证当前请求已经认证,具有身份,不会再执行(跳过)后续的用户登录的相关过滤器 ?

在Spring Security中,确实存在一个机制来确保已经登录的用户在随后的请求中仍然被识别和认证。这个机制通常涉及到几个关键组件,包括SecurityContextHolder, SecurityContext, 和一个用于持久化安全上下文的过滤器,通常是SecurityContextPersistenceFilter

当用户第一次登录成功后,SpringSecurity会将用户的认证信息存储在SecurityContext中,然后将这个SecurityContext保存在会话中(通常是HTTP会话)。在后续的请求中,SecurityContextPersistenceFilter会检查会话,恢复之前存储的SecurityContext,并将其放入SecurityContextHolder,使得当前请求拥有之前认证的用户信息。

因此,如果用户已经登录,SecurityContextPersistenceFilter将恢复用户的认证信息,使得系统知道该用户已经认证。这意味着后续的请求不需要用户再次登录,而且某些过滤器(比如处理登录的过滤器)在检测到用户已经认证的情况下可能会被跳过。

但是需要注意的是,SecurityContextHolderFilter并不是标准的Spring Security过滤器。你可能是在提及SecurityContextPersistenceFilter,这是一个更常见的用于在请求之间持久化SecurityContext的过滤器。

因此,如何我们已经在当前系统登录过的话,过滤器SecurityContextHolderFilter就会对SecurityContext 对象进行恢复,保证当前请求是具有身份的。

4.问题2

在前后端分离的应用程序中, 前端通过在请求头中 包含 Authorization: Bearer ,以表明当前请求具有身份信息,
是不是 后台可以处理请求头中的token, 通过将得到的 token 字符串 转换成 SecurityContext 对象, 恢复请求的身份 ?
这里不能再使用 默认的 HttpSessionSecurityContextRepository 或者 RequestAttributeSecurityContextRepository
恢复请求的身份信息,而是要自定义一个 SecurityContextRepository (例如 JwtSecurityContextRepository) 对象来达到此目的 ?

( 在 JwtSecurityContextRepository 中,从 请求头中获取到 tokenString, 转成 一个 authenticatedToken,然后执行 securityContext.setAuthentication(authenticatedToken))

在前后端分离的应用程序中,确实常会遇到需要在前端发送带有访问令牌(例如JWT)的请求,而后端需要验证这个令牌并恢复用户身份的情形。这种情况下,令牌通常通过Authorization请求头以Bearer <token>的形式发送。

后端处理这个流程涉及的关键组件是AuthenticationFilter(例如OncePerRequestFilter的实现类),这个过滤器会负责分析和验证请求头中的令牌。在SpringSecurity中,你可以使用JwtAuthenticationTokenFilter这样的自定义过滤器来实现这个功能。此过滤器会读取请求头中的令牌,验证其有效性,然后创建对应的Authentication对象(比如UsernamePasswordAuthenticationToken或者自定义的Authentication实现,若是JWT可以是JwtAuthenticationToken)。

至于提到的SecurityContextRepository,这是一个用于从请求中加载或保存SecurityContext的策略接口。确实,当使用诸如JWT这样的无状态令牌时,使用HttpSessionSecurityContextRepositoryRequestAttributeSecurityContextRepository这样的基于会话的实现就不再适合了,因为它们依赖于HTTP会话来存储安全上下文。

在这种情况下,你可以自定义一个SecurityContextRepository,让我们称之为JwtSecurityContextRepository。这个自定义的仓库可以在每次请求中从请求头中解析JWT令牌,然后创建一个带有认证信息的SecurityContext

这个过程可能看起来是这样的:

  1. 自定义的JwtAuthenticationTokenFilter从请求头中提取JWT令牌。
  2. 对JWT令牌进行验证,确保它有效并来自可信的颁发者。
  3. 验证通过后,将JWT令牌转换为Authentication对象,并设置到SecurityContextHolder中。
  4. 自定义的JwtSecurityContextRepository不会像基于会话的实现那样保存SecurityContext,因为每个请求都应该是无状态的,并且SecurityContext应该从令牌中重新构建。

通过这样的方式,安全上下文在每次请求中都是根据携带的JWT重新构建的,确保了前后端分离架构中的无状态认证机制。

5.参考文献

  • https://springdoc.cn/spring-security/servlet/architecture.html
  • http://springboot.fun/

6.总结

以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。

如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。

ToLeoJavaer公众号 (微信搜索程序员Leo)

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

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

相关文章

计算机专业毕业后的选择有哪些?

这就得看你自己的职业规划啦&#xff0c;现在考公考研也很卷&#xff0c;就业环境也不太乐观&#xff0c;既然这样&#xff0c;做选择就遵守自己的内心&#xff0c;从自己的职业规划和兴趣来选吧。 下面我们就先对这三条路的职业方向来做分析&#xff1a; 1.考研 考研也有两…

mongodb——概念介绍(文档,集合,固定集合,元数据,常用数据类型)

mongodb 层级结构 实例&#xff1a;系统上运行的进程及节点集&#xff0c;一个实例可以有多个库&#xff0c;默认端口 27017。 库&#xff1a;多个集合组成数据库&#xff0c;每个数据库都是独立的&#xff0c;有自己的用户、权限信息&#xff0c;独立的存储文件集 合。 集合&…

选择java商城开发商需要注意哪些方面?

Java商城开发是一项庞大而复杂的任务&#xff0c;选择一家合适的开发商至关重要。那么&#xff0c;我们在选择Java商城开发商时&#xff0c;需要注意哪些方面呢&#xff1f; 1、专业经验 选择具有丰富经验的开发商是至关重要的。开发商应该拥有多年的Java开发经验&#xff0c;…

Thales安全解决方案:国家网络安全的关键

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显。在这个背景下&#xff0c;Thales安全解决方案正成为提高国家网络安全的关键。本文将探讨Thales安全解决方案如何为国家网络安全保驾护航。 一、Thales安全解决方案概述 Thales安全解决方案是一种全方位的网络安全防护…

武汉凯迪正大KDHG-220P互感器综合测试仪

主要特点 武汉凯迪正大KDHG-220P互感器综合测试仪&#xff0c;仅需进行简单的数字设定&#xff1a;设定互感器的额定参数。仪器将全过程自动记录数据&#xff0c;并自动将变比极性、伏安特性曲线等计算并显示出来&#xff0c;省去换线、手动调压、人工记录、整理、描曲线等烦琐…

Spring Boot 与 Gzip 压缩

响应压缩是 Web 应用一种常见的优化手段&#xff0c;通过压缩算法减小传输数据的体积&#xff0c;提高传输效率、节约带宽。客户端接收到数据后&#xff0c;使用相同的算法对数据进行解压从而获取到原始数据。 客户端和服务器需要通过 Header 来协商双方支持的压缩算法。 Acc…

我了解的3D游戏引擎和图形开发框架

如果你像我一样&#xff0c;没有什么比编写或设计软件更让人兴奋的了。 当我编写代码时&#xff0c;我所获得的巨大快乐促使我开发了跨越许多软件领域的项目。 这些领域之一是为本机应用程序、桌面展示或 Web 创建 3D 图形。 我从未创建过任何 3D 游戏&#xff0c;但很多时候我…

【Rust】快速教程——一直在单行显示打印、输入、文件读写

前言 恨不过是七情六欲的一种&#xff0c;再强大的恨也没法独占整颗心&#xff0c;总有其它情感隐藏在心底深处&#xff0c;说不定在什么时候就会掀起滔天巨浪。——《死人经》 图中是Starship扔掉下面的燃料罐&#xff0c;再扔掉头顶的翅膀后&#xff0c;再翻转过来着陆火星的…

SASS/SCSS精华干货教程

目录 介绍 基本说明 特点 sass语法格式sass的语法格式一共有两种&#xff0c;一种是以".scss"作为拓展名&#xff0c;一种是以".sass"作为拓展名&#xff0c;这里我们只讲拓展名&#xff1a; 编译环境安装 Vscode安装编译插件 简单使用 sass语法扩张…

15.ORACLE11g的归档方式和日志文件的相关操作

ORACLE11g的归档方式和日志文件的相关操作 一、什么是日志文件1、在线日志文件2、归档日志文件 二、Oracle 11g 归档方式&#xff1a;1、归档方式状态2、归档日志方式下数据库的工作原理3、配置归档日志方式3.1 开启归档模式3.2 日志文件相关操作&#xff1a; 4、oracle11g联机…

API接口测试工具为什么尤其重要

在现代软件开发中&#xff0c;API接口测试工具扮演着关键的角色&#xff0c;连接不同的软件组件&#xff0c;实现数据传递和功能调用。为确保API的可靠性、安全性和性能&#xff0c;此工具成为不可或缺的一部分。本文将介绍API接口测试工具的重要性! 1. 自动化测试的效率 API接…

Java集合大总结——Set的简单使用

Set的简单介绍 Set接口是Collection的子接口&#xff0c;Set接口相较于Collection接口没有提供额外的方法。Set 集合不允许包含相同的元素&#xff0c;如果试把两个相同的元素加入同一个 Set 集合中&#xff0c;则添加操作失败。Set集合支持的遍历方式和Collection集合一样&am…

【前端学java】Java中的异常处理(15)完结

往期回顾&#xff1a; 【前端学java】JAVA开发的依赖安装与环境配置 &#xff08;0&#xff09;【前端学java】java的基础语法&#xff08;1&#xff09;【前端学java】JAVA中的packge与import&#xff08;2&#xff09;【前端学java】面向对象编程基础-类的使用 &#xff08;…

Universal adversarial perturbations(2017 CVPR)

Universal adversarial perturbations----《普遍对抗扰动》 通俗UAP算法步骤理解&#xff1a;对于 x i ∈ X {x_i} \in X xi​∈X 的每个采样数据点&#xff0c;比较 k ^ ( x i v ) \hat k({x_i} v) k^(xi​v) 与 k ^ ( x i ) \hat k({x_i}) k^(xi​) &#xff0c;如果 k…

电脑监控软件都有哪些,哪款好用丨全网盘点

电脑监控软件是一种用于监视和控制计算机的软件工具&#xff0c;可以帮助企业和个人了解计算机的使用情况&#xff0c;保护数据安全&#xff0c;提高工作效率等。 电脑监控软件都有哪些&#xff1a; 1、域之盾软件 这是一款功能强大的电脑监控软件&#xff0c;可以实时监控电脑…

算法之回溯

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

Java SE——*API API帮助文档

1. API概述 Java中的API可以理解为一本编程字典或者工具包&#xff0c;它包含了许多预定义的类、接口和方法&#xff0c;可以帮助我们更方便地开发Java程序 想象一下&#xff0c;当你要做一个饭菜的时候&#xff0c;你需要食谱和厨具。食谱告诉你需要哪些食材和步骤&#xff…

腾讯云助力港华能源上线“碳汭星云2.0”,推动能源行业绿色低碳转型

11月17日&#xff0c;港华能源与腾讯云联合打造的港华智慧能源生态平台“碳汭星云2.0”升级上线。依托双方的连接、大数据能力和行业深耕经验&#xff0c;该平台打破了园区“数据孤岛”&#xff0c;进一步提升了数据治理、应用集成和复制推广能力&#xff0c;未来有望以综合能源…

记录一次较为完整的Jenkins发布流程

文章目录 1. Jenkins安装1.1 Jenkins Docker安装1.2 Jenkins apt-get install安装 2. 关联github/gitee服务与webhook2.1 配置ssh2.2 Jenkins关联2.3 WebHook 3. 前后端关联发布 1. Jenkins安装 1.1 Jenkins Docker安装 Docker很好&#xff0c;但是我没有玩明白如何使用Docke…

php伪随机数

利用工具 php_mt_seed <?php // php 7.2function white_list() {return mt_rand();}echo white_list(), "\n";echo white_list(), "\n";echo white_list(), "\n"; 输入命令&#xff1a; ./php_mt_seed 1035656029 <?phpmt_srand(181095…