SpringSecurity6从入门到上天系列第三篇:回顾Filter以及SpringSecurity6的实现原理

news2024/11/25 4:46:55

文章目录

前言

1:几个核心问题

 2:一个关键思考

一:回顾Filter

1:过滤器概念作用

2:过滤器核心代码 

3:过滤器原理

4:过滤器链 FilterChain

二:SSC的FilterChain

1:原理

2:图示


大神链接:作者有幸结识技术大神孙哥为好友,获益匪浅。现在把孙哥视频分享给大家。

孙哥链接:孙哥个人主页
作者简介:一个颜值99分,只比孙哥差一点的程序员
本专栏简介:话不多说,让我们一起从面到里干翻SpringSecurity6

本文章简介:话不多说,让我们讲清楚SpringSecurity6的实现原理

前言

1:几个核心问题

        之前,我们引入了一下这四个问题,接下来,我们会在后续的文章中一一解答。

1:在引入 Spring Security 后,为什么所有请求就需要先做登录认证了呢?
2:登录页面是怎么产生的?
3:默认用户 user 和 控制台的密码,是哪里来的 存在了哪里的,怎么做的验证?
4:登录页面、帐号和密码能自定义吗? 

 2:一个关键思考

        如何实现client向server发送请求时,先检测用户是否登录,登陆了才能访问,没有登录重定向登录页面?

        如果向实现这个东西,那么客户端请求的时候就不能直接碰到web应用,而是对当前的请求进行一个登录检查,如果是已经登录那么就继续访问web资源,如果没有登录那么就返回登录页面。

        适用于这个点的功能组件,我们首先想到的就是过滤器或者叫拦截器!

         SpringSecurity的技术手段是怎样的呢?SpringSecurity对于Servlet的支持是基于Servlet Filter的。也就是说SSC的实现技术手段也是Filter。

一:回顾Filter

1:过滤器概念作用

        当客户端访问一个Servlet时,需要经过一系列的过滤器。这一系列的Filter和Sevlet形成了一个Filter Chain的概念。下面的图显示了单个Http请求的处理程序的典型分层

        过滤器由

2:过滤器核心代码 

        这个方法是必须被覆盖重写的方法。在这个方法里边chain.doFilter放行当前过滤器,进行下一步过滤器。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
	// do something before the rest of the application
    chain.doFilter(request, response); // invoke the rest of the application
    // do something after the rest of the application
}

3:过滤器原理

        必须实现 Filter 接口过器在访问 Web 资源可以对请求进行拦截,并对请求进行预处理和后处理操作,然后将请求传递给日标资源。

        比如,强制登录过滤器,访问 web 资源时先对请求进行登录检查,已登录可以往后访问,未登录重定向回登录页。

4:过滤器链 FilterChain

        在对一个 web 资源进行拦截处理时的多个 Filter 和 web 资源组成一个FlterChain 过照链

        FilterChain 中的 doFilter() 方法非常重要,用于让 Filter 链上的当前过滤器放行,使请求或响应进入下一Filter 或 web 资源

二:SSC的FilterChain

1:原理

        SpringSecurity在实现的时候也是基于了一系列的Filter。

        其中有几个重要的:DelegatingFilterProxy(委托过滤器代理),这个是Servle容器和Spring工厂之间的桥梁。

        如果在应用的过滤器链中想使用SpringSecurity的过滤器,那么就需要DelegatingFilterProxy就在FilterChain里边。然后就往原生的Filter Chain里边注入了Spring Security的FilterChain。

2:图示

        具体的实现原理请查看下面的文章。 

       

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

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

相关文章

2019数二(二重积分的不等式问题)

注&#xff1a; 1、在相同积分区域内的积分比较大小&#xff1a;被积函数大的积分值大&#xff0c;被积函数小的积分值小 2、在区间[0&#xff0c;Π/2]上 &#xff1a;sinx < x < tanx

JS+CSS随机点名详细介绍复制可用(可自己添加人名)

想必大家也想拥有一个可以随机点名的网页&#xff0c;接下来我为大家介绍一下随机点名&#xff0c;可用于抽人&#xff0c;哈哈 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>* {margin: 0;…

前端框架Vue学习 ——(四)Axios

文章目录 Axios 介绍Axios 入门 Axios 介绍 介绍: Axios 对原生的 Ajax 进行了封装&#xff0c;简化书写&#xff0c;快速开发。&#xff08;异步请求&#xff09; 官网: https://www.axios-http.cn/ 官网介绍&#xff1a;Axios 是一个基于 promise 网络请求库&#xff0c;作…

一个很不错的开源图像库 Graphics32

Graphics32 是一个很不错的开源图像库。通过调试和跟踪Graphics32 的代码&#xff0c;可以快速的熟悉图像处理的一些知识。例外Graphics32有着很不错的性能。在不使用DirectX的情况下能达到一个惊人的速度&#xff0c;可以作为一个简单的2D引擎来使用&#xff0c;就功能上讲比那…

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器&#xff0c;液晶1602显示&#xff0c;DS18B20采集温度&#xff0c;光敏电阻采集光照、按键设置温度上下限&#xff0c;测量温度小于下限&#xff0c;启动加热&#xff0c;测量温度大于上限&#xff0c;启动降温。 二、硬件设计 …

Photoshop图片处理

工具 Photoshop剪映 步骤 打开photoshop 工具主界面 2. 导入素材图片 或者直接将图片拖入主界面 3. 双击图层&#xff0c;将背景图改为可编辑图层 4. 使用多边形套索工具勾画需要搽除的区域 5. 希望删除的区域使用多边形套索工具勾画出来后&#xff0c; 按“del”键&a…

Flutter 08 三棵树(Widgets、Elements和RenderObjects)

一、Flutter三棵树背景 1.1 先思考一些问题 1. Widget与Element是什么关系&#xff1f;它们是一一对应的还是怎么理解&#xff1f; 2. createState 方法在什么时候调用&#xff1f;state 里面为啥可以直接获取到 widget 对象&#xff1f; 3. Widget 频繁更改创建是否会影响…

手把手教程 | YOLOv8-seg训练自己的分割数据集

&#x1f680;&#x1f680;&#x1f680;手把手教程&#xff1a;教会你如何使用自己的数据集开展分割任务 &#x1f680;&#x1f680;&#x1f680;YOLOv8-seg创新专栏&#xff1a;http://t.csdnimg.cn/KLSdv 学姐带你学习YOLOv8&#xff0c;从入门到创新&#xff0c;轻轻松…

基于卷尾猴算法的无人机航迹规划-附代码

基于卷尾猴算法的无人机航迹规划 文章目录 基于卷尾猴算法的无人机航迹规划1.卷尾猴搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要&#xff1a;本文主要介绍利用卷尾猴算法来优化无人机航迹规划。 1.卷尾猴…

C++入门学习(1)命名空间和输入输出

前言 在C语言和基本的数据结构学习之后&#xff0c;我们终于迎来了期待已久的C啦&#xff01;C发明出来的意义就是填补一些C语言的不足&#xff0c;让我们更加方便的写代码&#xff0c;所以今天我们就来讲一下C语言不足的地方和在C中的解决办法&#xff01; 一、命名空间 在学习…

云产品 FC 免费试用获取奖励完整步骤

文章目录 步骤 1&#xff1a;获取活动链接步骤 2&#xff1a;报名参加步骤 3&#xff1a;试用产品步骤 4&#xff1a;部署步骤 5&#xff1a;访问应用步骤 6&#xff1a;生成小说步骤 7&#xff1a;提交作品步骤 8&#xff1a;提交任务获取奖励 &#x1f389;云产品 FC 免费试用…

动态规划(Dynamic Programming)—— Java解释

一、基本思想 动态规划(Dynamic Programming)算法的核心思想是&#xff1a;将大问题划分为小问题进行解决&#xff0c;并将子问题的求解结果存储起来避免重复求解&#xff0c;从而一步步获取最优解的处理算法。 动态规划算法与分治算法类似&#xff0c;其基本思想也是将待求解…

【Solidity】Solidity中的基本数据类型和复合数据类型

1. 基本数据类型 1.1 整数类型 Solidity支持有符号整数和无符号整数&#xff0c;可以指定位数和范围。以下是一些整数类型的示例&#xff1a; int&#xff1a;有符号整数&#xff0c;可以是正数或负数。2&#xff0c;-45&#xff0c;2023 uint&#xff1a;无符号整数&#x…

系统提示缺少或找不到d3dcompiler_43.dll文件的详细修复教程

今天我来给大家分享一下关于d3dcompiler_43.dll缺失的4个修复方法。 首先&#xff0c;我们来了解一下d3dcompiler_43.dll的作用。它是DirectX中的一个组件&#xff0c;用于编译Shader和Pixel着色器代码。如果缺少了这个文件&#xff0c;就会导致游戏或应用程序无法正常运行。 …

操作系统复习(2)进程管理

一、概述 1.1程序的顺序执行 一个具有独立功能的程序独占CPU运行&#xff0c;直至得到最终结果的过程称为程序的顺序执行。 程序的并发执行所表现出的特性说明两个问题 ⑴ 程序和计算机执行程序的活动不再一一对应 ⑵ 并发程序间存在相互制约关系&#xff08;要求共享信息&…

Docker容器中执行throttle.sh显示权限报错:RTNETLINK answers: Operation not permitted

在模拟通信环境时&#xff0c;我执行了一下命令&#xff1a; bash ./throttle.sh wan但是&#xff0c;出现了权限的报错&#xff1a;RTNETLINK answers: Operation not permitted 解决方案说简单也挺简单&#xff0c;只需要两步完成。但是其实又蛮繁琐&#xff0c;因为需要将…

伪随机序列——m序列及MATLAB仿真

文章目录 前言一、m 序列1、m 序列的产生2、m 序列的性质①、均衡性②、游程分布③、移位相加特性④、自相关函数⑤、功率谱密度⑥、伪噪声特性 二、M 序列1、m 序列的产生2、m 序列的性质 三、MATLAB 中 m 序列1、m 序列生成函数的 MATLAB 代码2、MATLAB 仿真 前言 在通信系统…

15 _ 二分查找(上):如何用最省内存的方式实现快速查找功能?

今天我们讲一种针对有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,很多非计算机专业的同学很容易就能理解,但是看似越简单的东西往往越难掌握好,想要灵活应用就更加困难。 老规矩,我们还是来看一道思考题。 假设我们…

【Android】Android Framework系列---CarPower深度睡眠STR

Android Framework系列—CarPower深度睡眠 之前博客的说说CarPower的开机启动流程 这里分析一下&#xff0c;Android CarPower实现深度睡眠的流程。 首先&#xff0c;什么是深度睡眠(Deep Sleep)? Android进入Deep Sleep后&#xff0c;关闭屏幕、关闭CPU的电源&#xff0c;保…

【Head First 设计模式】-- 观察者模式

背景 客户有一个WeatherData对象&#xff0c;负责追踪温度、湿度和气压等数据。现在客户给我们提了个需求&#xff0c;让我们利用WeatherData对象取得数据&#xff0c;并更新三个布告板&#xff1a;目前状况、气象统计和天气预报。 WeatherData对象提供了4个接口&#xff1a; …