【Spring Security】3.底层原理

news2024/11/28 16:37:38

文章目录

  • 一、引入
  • 二、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.coloradmin.cn/o/1576847.html

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

相关文章

存储(一)

海量数据下的分布式事务? 单体项目中 只需要关系型数据库来保证ACID 就行。但是分布式情况下,数据库会分成多个库。想达到这种情况的ACID 是不可行的。 分布式下的事务一致 2PC、3PC、TCC、Saga 和 本地消息表 (单机,性能好&…

[每日算法 - 阿里机试] leetcode739. 每日温度

入口 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/daily-temperatures/descr…

ChatGPT基础(一) GPT的前世今生

文章目录 GPT模型简史GPT系列模型ChatGPT的应用 最近ChatGPT3.5可以免注册使用了,出来刨一波坟 说一说ChatGPT的来源和应用。 GPT模型简史 Generative pre-trained transformers(GPT)生成式预训练转换模型是大语言模型的一种(Large Language Model–>LLM)。它是…

带你了解CST的Frontend License Released【官方教程】

什么是Frontend License Released? 了解内部功能,有效使用License! File>Release Frontend License 使用CST的过程中,应该见过右图的提示。这是长期没有在CST中进行Modeling、仿真分析设置等Pre-Processing操作,或者从结果…

【代码】C语言|保留小数点后n位并四舍五入,便于处理运算和存储不善的浮点数

前言 有个人跟我说浮点数运算起来非常麻烦,总是算着算着丢失精度,导致计算结果取int的时候取不准。毕竟系统也没有自动根据这个数的精度四舍五入的功能。 比如int(2.999999999999999)2,但是float(2.999999999999999)3.000000。 我觉得这个问…

GD32零基础教程第三节(模块化编程封装LED模块)

文章目录 前言一、模块化编程概念二、创建HardWare文件夹管理硬件模块文件三、编写led.c和led.h文件总结 前言 模块化编程是将一个大型系统分解为更小、更易管理的模块或组件的过程。每个模块都有明确定义的接口和功能,可以独立开发、测试和维护。那么本篇文章将带…

相位导数方差计算-matlab

%% 下面计算 相位导数方差% 假设 phase_map 是你的相位图二维矩阵 % K 是窗口的大小 k 3; % 请使用实际的窗口大小替换% 计算 x 和 y 方向的偏导 [dx, dy] gradient(wrappedPhase); Ksq k^2; % 计算 K^2half_k floor(k / 2);% 初始化结果矩阵 result zeros(size(wrappedPh…

蓝桥杯刷题--RDay6

特殊日期 3.特殊日期 - 蓝桥云课 (lanqiao.cn)https://www.lanqiao.cn/problems/2408/learning/?first_category_id1&page1&second_category_id3&tags2023 对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月…

【Django开发】前后端分离美多商城项目第6篇:用户部分,1. 业务说明【附代码文档】

美多商城项目4.0文档完整教程(附代码资料)主要内容讲述:美多商城,项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备,配置1. 修改set…

单例模式--理解

单例模式 单例模式是指在内存中只会创建且仅创建一次对象的设计模式。在程序中多次使用同一个对象且作用相同时,为了防止频繁地创建对象使得内存飙升,单例模式可以让程序仅在内存中创建一个对象,让所有需要调用的地方都共享这一单例对象。 单…

基于单片机室内温湿度监测系统仿真设计

**单片机设计介绍,基于单片机室内温湿度监测系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机室内温湿度监测系统仿真设计的沟通概要主要涉及以下几个方面: 一、项目背景与目标 首…

借助 Aspose.Words,在 C# 中将图片转换为 Word

Microsoft Word 提供了多种用于生成具有增强的格式化功能的文本文档的工具。除了文本格式之外,我们还可以将各种图形元素和图像合并到Word文档中。在某些情况下,我们可能需要将图片或照片插入DOC或DOCX格式的Word文档中。在本文中,我们将学习…

【redis数据同步】redis-shake数据同步全量+增量

redis-shake数据同步 redis-shake是基于redis-port基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。以下主要介绍同步sync。 恢复restore:将RDB文件恢复到目的redis数据库。备份dump:将源redis的全量数据通过RDB文件备份起来。解析de…

个推助力小米汽车APP实现智能用户触达,打造智能出行新体验

4月3日,小米SU7首批交付仪式在北京亦庄的小米汽车工厂总装车间举行,全国28城交付中心也同步开启首批交付。随着小米SU7系列汽车的正式发售和交付,小米汽车APP迎来了用户体量的爆发式增长。 小米汽车APP是小米汽车官方推出的手机应用&#xff…

Echarts基础-安装语法高亮插件less-rem转换动态适配大小

Echarts基础-安装语法高亮插件&less-rem转换动态适配大小 基础介绍插件安装教程安装less 插件安装cssrem 插件引入flexibel.js文件 基础介绍 Echarts是一个功能强大的JavaScript开源可视化库,专门用于创建各种图表和数据可视化。 以下是关于Echarts的一些基础介…

区块链技术与数字身份:解析Web3的身份验证系统

在数字化时代,随着个人数据的日益增多和网络安全的日益关注,传统的身份验证系统面临着越来越多的挑战和限制。在这种背景下,区块链技术的出现为解决这一问题提供了全新的思路和解决方案。Web3作为一个去中心化的互联网模式,其身份…

Elasticsearch快速上手

基本概念 索引(Index) 索引是文档的容器,就像关系数据库中,要存储行记录必须先创建数据库和表一样。 类型(Type) ES6 及之前的版本还存在”类型“的概念,一个索引下可以存储多个类型的文档&am…

电脑怎么录屏带声音?这么操作就对了!

随着数字化时代的快速发展,电脑录屏带声音的需求逐渐增多。无论是为了制作教学视频、游戏解说,还是为了记录会议内容,一个稳定、易用的录屏工具都是必不可少的,可是电脑怎么录屏带声音呢?本文将介绍两种电脑录屏方法&a…

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建

一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…

C++模仿qq界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口的大小this->resize(645,497);//设置窗口名字this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(QIcon("C:\\zhouzhouMyfile\\qt_proj…