【Spring Security】3.底层原理

文章目录

  • 一、引入
  • 二、Filter
    • 1)DelegatingFilterProxy
    • 2)FilterChainProxy
    • 3)SecurityFilterChain
    • 4)Multiple SecurityFilterChain

一、引入

官方文档:Spring Security的底层原理

Architecture:整个SpringSecurity的基础架构

官方解释:本节讨论 Spring Security 在基于 Servlet 的应用程序中的高级体系结构。 我们在参考的“身份验证、授权和防范漏洞利用”部分中基于这种高层次的理解。

image-20240306110334111

Spring Security之所以默认帮助我们做了那么多事情,它的底层原理是传统的Servlet过滤器

请求由我们的客户端向后端服务器发起,经过层层过滤器的进行,最后它会到达Servlet。

我们刚刚写的index方法,底层就是servlet当中的具体的方法。因为我们的应用程序是SpringBoot程序,所以我们的应用程序是通过controller的方式来实现的servlet。

在正常情况下这些过滤器在应用程序启动的时候就要被注册在servlet容器里才能工作,但为了更灵活的在应用程序当中配置这些过滤器,其实我们的应用程序采用的是SpringBoot形式,而SpringBoot里的本质是spring、springMVC这些基础框架,也就意味着,其实在spring这种环境下,希望把这些Filter对象当做spring容器中的bean对象来管理。这些过滤器在添加、删除、启用和禁用的过程中就会更灵活。


二、Filter

下图展示了处理一个Http请求时,过滤器和Servlet的工作流程:

filterchain

因此我们可以在过滤器中对请求进行修改或增强。


1)DelegatingFilterProxy

DelegatingFilterProxy(委托过滤器代理) 是 Spring Security 提供的一个 Filter 实现,可以在 Servlet 容器和 Spring 容器之间建立桥梁。通过使用 DelegatingFilterProxy,这样就可以将Servlet容器中的 Filter 实例放在 Spring 容器中管理。

filter先以bean对象的形式注册在spring容器中,DelegatingFilterProxy帮助我们在spring的环境中加载filter bean对象。但因为DelegatingFilterProxy本身也是个filter,它会被注册在servlet过滤器链(FilterChain)中。在Spring容器中注册的bean filter就可以在DelegatingFilterProxy调用,从而工作在整个Servlet中的FilterChain,也就是过滤器链中。整个过程就叫做委托。

delegatingfilterproxy


2)FilterChainProxy

复杂的业务中不可能只有一个过滤器。因此FilterChainProxy是Spring Security提供的一个特殊的Filter,它允许通过SecurityFilterChain将过滤器的工作委托给多个Bean Filter实例。

应用程序为了更灵活,DelegatingFilterProxy管理FilterChainProxy过滤器链代理的这个类,然后通过过滤器链代理再去调用SecurityFilterChain。FilterChainProxy又被DelegatingFilterProxy调用。DelegatingFilterProxy是真正注册在servlet容器中的。

filterchainproxy


3)SecurityFilterChain

SecurityFilterChain 被 FilterChainProxy 使用,负责查找当前的请求需要执行的Security Filter列表。

securityfilterchain


4)Multiple SecurityFilterChain

为了让应用程序更灵活。可以有多个SecurityFilterChain的配置,FilterChainProxy决定使用哪个SecurityFilterChain,用于处理更复杂的应用程序。

如果请求的URL是 /api/messages/,它首先匹配SecurityFilterChain0的模式/api/**,因此只调用SecurityFilterChain 0,r如果在 SecurityFilterChain 0 中没有找到实例匹配,就会一直从SecurityFilterChain 0找到SecurityFilterChain n - 1。假设没有其他SecurityFilterChain实例匹配,那么将调用SecurityFilterChain n,它匹配的是/**,也就是所有客户端的请求。

multi securityfilterchain

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

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

相关文章

【Qt 学习笔记】如何在Qt中打印日志 | qDebug的使用 | Assistant的使用

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 如何在Qt中打印日志 | qDebug的使用 文章编号:Qt 学习笔记…

宁波卓越绩效模式导入验收

😀宁波卓越绩效💕模式导入验收,🏅不仅是对企业🎁管理水平的全面检验,更是🚀推动企业🚒追求卓越、实现🦚持续发展的重要契机。🌳这一模式的导入,意…

23.oracle保留两位小数、小数点后不足两位的补0

to_char()函数:转化数字型指定小数点位数的用法/* to_char(0.1,fm9999990.00) */

FreeRtos入门-8 调试

调试 0,打印状态(略) 1,断言 在编程中,断言是一种一阶逻辑,即一个结果为真或假的逻辑判断式。其目的是表示与验证软件开发者预期的结果。当程序执行到断言的位置时,对应的断言应该为真。如果断言…

海量智库 | ANY权限原理介绍

ANY权限是Vastbase中的一种特殊的管理权限,用户能够通过ANY权限执行更广泛的操作,更加便利的管理数据库。 本文将为您介绍ANY权限管理的相关原理。 ANY权限管理相关解释 ANY权限管理,是对数据库内的某一类对象的所有实体进行特定的权限管理…

国内ChatGPT大数据模型

在中国,随着人工智能技术的迅猛发展,多个科技公司和研究机构已经开发出了与OpenAI的ChatGPT类似的大型语言模型。这些模型通常基于深度学习技术,尤其是Transformer架构,它们在大量的文本数据上进行训练,以理解和生成自…

酱油行业市场需求及广阔前景分析

随着居民消费升级,对高品质生活的向往使得酱油市场需求持续增长。消费者对酱油的功能性需求日益细分,追求健康、天然与个性化的产品特性,从而推动了市场的多元化进步。 同时,餐饮业的蓬勃发展以及外卖市场的扩大,均为酱…

解决nginx代理后,前端拿不到后端自定义的header

先说结论,因为前端和nginx对接,所以需要在nginx添加如下配置向前端暴露header add_header Access-Control-Expose-Headers Authorization 排查过程 1.后端设置了Authorization 的响应头作为token的返回,前后端本地联调没有问题 response.s…

隔离放大器 用途 组成 应用领域

隔离放大器用于防止数据采集器件遭受远程传感器出现的潜在破坏性电压的影响。这些放大器还用于在多通道应用中放大低电平信号。它们也可以消除由接地环路引起的测量误差。由于不需要附加的隔离电源,带有内部变压器的隔离放大器可以降低电路成本 它由仪器放大器&…

LeetCode-33. 搜索旋转排序数组【数组 二分查找】

LeetCode-33. 搜索旋转排序数组【数组 二分查找】 题目描述:解题思路一:二分查找。1.找哨兵节点(nums[0]或nums[-1])可以确定nums[mid]位于前一段或后一段有序数组中。2. 就是边界left和right的变换,具体看代码。解题思…

[LeetCode][LCR178]训练计划 VI——使用位运算寻找数组中不同的数字

题目 LCR 178. 训练计划 VI 教学过程中,教练示范一次,学员跟做三次。该过程被混乱剪辑后,记录于数组 actions,其中 actions[i] 表示做出该动作的人员编号。请返回教练的编号。 示例 1: 输入:actions [5, …

网络安全之命令注入

漏洞原理: 应用系统设计需要给用户提供指定的远程命令操作的接口,比如:路由器,防火墙,入侵检测等设备的web管理界面。一般会给用户提供一个ping操作的web界面 用户从web界面输入目标IP,提交后台会对改IP地…