(十五)springboot实战——spring securtity的核心过滤器介绍

前言

本节内容主要介绍spring securtity安全框架的一些核心过滤器及其作用,我们都清楚spring securtity安全框架底层是基于filter过滤器实现的,采用的是责任链的设计模式,它有一条很长的过滤器链。本次spring securtity原理介绍使用的版本是5.6.8,不同版本之间可能略有差异。

正文

①WebAsyncManagerIntegrationFilter过滤器

- 将Security上下文与 Spring Web 中用于处理异步请求映射的WebAsyncManager进行集成,用于集成 Web 异步管理器。主要是创建和初始化异步请求上下文,在请求处理完成之后,清理异步请求上下文,释放资源,处理异步请求期间可能出现的异常情况,确保异步请求的稳定性和可靠性。

② SecurityContextPersistenceFilter过滤器

- 在 Web 应用程序中,当用户进行登录认证成功后,Spring Security会创建一个包含用户身份认证信息的安全上下文(SecurityContext),通常存储在 HttpSession 中。在每次 HTTP 请求到达时,检查并尝试从适当的存储位置(通常是 HttpSession)中加载安全上下文信息,将加载的安全上下文信息存储到当前的SecurityContextHolder中,以便后续的安全验证和授权处理。在 HTTP 请求处理完成之后,将更新后的安全上下文信息重新存储到适当的位置,确保安全上下文信息在不同请求之间的持久化和恢复。

③ HeaderWriterFilter过滤器

- HeaderWriterFilter"是 Spring Security 中的一个过滤器,用于向 HTTP 响应的头部添加特定的安全标头(Security Headers),增强 Web 应用程序的安全性。

CorsFilter过滤器

- CorsFilter是Spring Security中的一个过滤器,用于防止跨站请求伪造(CSRF)攻击。会在用户登录后,为用户生成一个唯一的 CSRF 令牌,并将其存储在用户的会话中。

⑤ LogoutFilter过滤器

- 用于处理退出登录,默认匹配/logout路径,可以在SecurityFilterChain中配置

⑥ UsernamePasswordAuthenticationFilter过滤器

- 用于处理表单认证的登录请求,从表单中获取用户名和密码,封装为UsernamePasswordAuthenticationToken对象

。默认是处理post请求下的/login,其它请求不会处理,并会直接放行

⑦ ConcurrentSessionFilter过滤器

-ConcurrentSessionFilter"是Spring Security中的一个过滤器,用于处理并发会话控制。如果一个用户在同一时间内多次登录到系统,可能会导致安全问题和数据不一致性。为了解决这个问题,Spring Security 提供了ConcurrentSessionFilter来实现并发会话控制。ConcurrentSessionFilter在SpringSecurity中用于实现并发会话控制,确保每个用户在同一时间只能有一个有效的会话,从而提高应用程序的安全性。

 ⑧BasicAuthenticationFilter过滤器

- 检测和处理http basic认证。BasicAuthenticationFilter 的主要作用是从请求头中提取用户名和密码,并将其与预先配置的用户凭据进行比较,以验证用户的身份。

- 当客户端发送包含基本身份验证凭据的请求时,例如在请求头中添加 "Authorization" 字段,值为 "Basic <base64 编码的用户名:密码>,BasicAuthenticationFilter 检测到该请求,并从请求头中提取出凭据信息。

- 将凭据信息与预先配置的用户凭据进行比较,以验证用户的身份。如果验证成功,请求将继续进行处理;如果验证失败,将返回身份验证失败的响应。

⑨ RequestCacheAwareFilter过滤器

- RequestCacheAwareFilter 就是负责管理重定向功能的过滤器。它会在用户请求被拦截并需要进行身份验证时,缓存用户请求的URL信息。当用户通过身份验证并进行重定向到原始请求页面时,RequestCacheAwareFilter 会使用缓存的 URL 信息来确保用户能够正确地返回到原始请求页面。

⑩ SecurityContextHolderAwareRequestFilter过滤器

- 它用于将安全上下文信息传递给 HttpServletRequest 对象,以便在请求处理过程中能够方便地获取和操作安全上下文信息。

- 在请求处理过程中,将当前用户的安全信息(如认证信息、授权信息等)从 SecurityContextHolder中提取出来,并将其设置到 HttpServletRequest 对象的属性中,以便在控制器或其他组件中可以轻松地访问这些安全信息。

AnonymousAuthenticationFilter过滤器

- AnonymousAuthenticationFilter"是 Spring Security中的一个过滤器,用于在用户尚未进行认证时创建一个匿名身份进行代替。这样即使用户尚未登录,系统也可以根据匿名身份进行相应的访问控制。

SessionManagementFilter过滤器

- 当用户进行身份验证成功后,SessionManagementFilter负责创建新的会话,并将用户的安全上下文信息存储在会话中。

- 当会话因为超时、用户退出登录或其他原因而失效时,SessionManagementFilter负责处理该情况,例如清除会话中的安全上下文信息、执行特定的操作或重定向到登录页面等。

- SessionManagementFilter可以控制并发会话的数量,限制同一用户在多个设备或浏览器上同时存在的会话数量,以提高应用程序的安全性。

ExceptionTranslationFilter过滤器

- 用于处理AccessDeniedException和 AuthenticationException异常。

⑭ FilterSecurityInterceptor过滤器

- FilterSecurityInterceptor是 pring Security 提供的核心过滤器之一,它在请求到达应用程序之前拦截并进行安全检查。其主要功能是根据配置的访问规则(如角色、权限等)对请求进行授权验证,决定是否允许用户继续执行该请求。

- 在处理请求时,FilterSecurityInterceptor 将会检查用户的身份认证情况以及用户所具有的角色和权限,并根据配置的访问规则进行匹配和验证。如果请求满足了访问规则,则允许用户继续执行请求;否则,将返回相应的错误信息或采取其他措施(如跳转到登录页面、拒绝访问等)。

- 通过配置FilterSecurityInterceptor,可以指定访问规则、配置访问权限、自定义错误处理等。这样可以保护您的应用程序免受未经授权的访问和攻击

结语

关于spring securtity的核心过滤器介绍内容到这里就结束了,我们下期见。。。。。。

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

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

相关文章

H12-821_31

31.下面是一台路由器的部分配置,关于该配置描述正确的是: A.源地址为1.1.1.1的数据包匹配第一条ACL语句rule 0,匹配规则为允许 B.源地址为1.1.1.3的数据包匹配第三条ACL语句rule 2,匹配规则为拒绝 C.源地址为1.1.1.4的数据包匹配第四条ACL语句rule 3,匹配规则为允许 D.源地址为…

Android13多媒体框架概览

Android13多媒体框架概览 Android 多媒体框架 Android 多媒体框架旨在为 Java 服务提供可靠的接口。它是一个系统&#xff0c;包括多媒体应用程序、框架、OpenCore 引擎、音频/视频/输入的硬件设备&#xff0c;输出设备以及一些核心动态库&#xff0c;比如 libmedia、libmedi…

探索Gorm - Golang流行的数据库ORM框架

&#x1f3f7;️个人主页&#xff1a;鼠鼠我捏&#xff0c;要死了捏的主页 &#x1f3f7;️系列专栏&#xff1a;Golang全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

多态

多态的基本语法 多态分为两类 静态多态: 函数重载 和 运算符重载属于静态多态&#xff0c;复用函数名动态多态: 派生类和虚函数实现运行时多态 静态多态和动态多态区别&#xff1a; 静态多态的函数地址早绑定 - 编译阶段确定函数地址动态多态的函数地址晚绑定 - 运行阶段确…

中科大计网学习记录笔记(十):P2P 应用

前言&#xff1a; 学习视频&#xff1a;中科大郑烇、杨坚全套《计算机网络&#xff08;自顶向下方法 第7版&#xff0c;James F.Kurose&#xff0c;Keith W.Ross&#xff09;》课程 该视频是B站非常著名的计网学习视频&#xff0c;但相信很多朋友和我一样在听完前面的部分发现信…

Centos7离线安装MySQL5.7

卸载mariadb rpm -e --nodeps mariadb-libs可以使用rpm -qa|grep mariadb命令检测是否卸载完成。 关闭selinux 将/etc/selinux/config文件中的SELINUX设置为disabled下载MySql的相关rpm包 打开https://dev.mysql.com/downloads/mysql/ 选择Red Hat Enterprise Linux / Oracle L…

离散数学截图

二元运算及其性质 二元运算中的特殊元 半群和独异点 代数系统的同态与同构 下确界是最大的下界&#xff0c;而在4、5、6三个下界里面&#xff0c;4和5都比6大。可4和5之间没办法分出大小&#xff0c;所以这个哈斯图没有下确界

Git、github与gitee码云

1.git核心是两个仓库&#xff1a;本地仓库和远程仓库 主要用于团队合作和代码版本控制&#xff08;个人现有版本代码出错可回溯上个提交版本的代码&#xff09; 远程仓库国际主流githut&#xff0c;但外网速度问题&#xff0c;国内可使用码云gitee github&#xff1a;https:…

腾讯云4核8G12M轻量应用服务器性能够用吗?支持多少人?

腾讯云轻量4核8G12M轻量应用服务器支持多少人同时在线&#xff1f;通用型-4核8G-180G-2000G&#xff0c;2000GB月流量&#xff0c;系统盘为180GB SSD盘&#xff0c;12M公网带宽&#xff0c;下载速度峰值为1536KB/s&#xff0c;即1.5M/秒&#xff0c;假设网站内页平均大小为60KB…

备战蓝桥杯---组合数学2

本专题主要介绍容斥原理。 大家高中的时候肯定接触过韦恩图&#xff0c;容斥原理比较通俗的理解就是减去所有可能并加上重叠的部分。 我们直接看公式&#xff1a; 知道后&#xff0c;我们先看道模板题&#xff1a; 下面是AC代码&#xff1a; #include<bits/stdc.h> us…

VMware虚拟机安装openEuler系统(二)(2024)

下面我们进行openEuler系统的一些简单配置。 1. 开启openEuler系统 在VMware Workstation Pro虚拟机软件中找到安装好的openEuler操作系统虚拟机并开启。 等待开启。 2. 安装配置 进入后选择第一个“Install openEuler 20.03-LTS”。 3. 选择系统语言 为虚拟机设置系统语言…

分享94个jQuery特效,总有一款适合您

分享94个jQuery特效&#xff0c;总有一款适合您 94个jQuery特效下载链接&#xff1a;https://pan.baidu.com/s/19AsyTWJUPcCX9DN3am53Sg?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理…

秋招上岸大厂,分享一下经验

文章目录 秋招过程学习过程项目经验简历经验面试经验offer选择总结 秋招过程 今天是除夕&#xff0c;秋招已经正式结束了&#xff0c;等春节过完就到了春招的时间点了。 运气比较好&#xff0c;能在秋招的末尾进入一家大厂&#xff0c;拿到20k的sp offer。 从九月份十月份就开…

大文件上传如何做断点续传?

文章目录 一、是什么分片上传断点续传 二、实现思路三、使用场景小结 参考文献 一、是什么 不管怎样简单的需求&#xff0c;在量级达到一定层次时&#xff0c;都会变得异常复杂 文件上传简单&#xff0c;文件变大就复杂 上传大文件时&#xff0c;以下几个变量会影响我们的用…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之ImageAnimator组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之ImageAnimator组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、ImageAnimator组件 提供分隔器组件&#xff0c;分隔不同内容块/内容元素…

HiveSQL——设计一张最近180天的注册、活跃留存表

0 问题描述 现有一个用户活跃表user_active(user_id,active_date)、 用户注册表user_regist(user_id,regist_date)&#xff0c;表中分区字段都为dt(yyyy-MM-dd)&#xff0c;用户字段均为user_id; 设计一张 1-180天的注册活跃留存表&#xff1b;表结构如下&#xff1a; 1 数据分…

ctfshow-php特性(web102-web115)

目录 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web114 web115 实践是检验真理的 要多多尝试 web102 <?php highlight_file(__FILE__); $v1$_POST[V1]; $v2$_GET[v2]; $v3$_GET[v3]; $v4is_numeric($v2)and is…

controller-manager学习三部曲之二:源码学习

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 本篇概览 作为《controller-manager学习三部曲》系列的第二篇&#xff0c;前面通过shell脚本找到了程序的入口&#xff0c;接下来咱们来学习controller-mana…

一文彻底搞懂布隆过滤器

文章目录 1. 基本原理2. 布隆过滤器的优点3. 布隆过滤器的缺点4. 布隆过滤器的应用场景 布隆过滤器&#xff08;Bloom Filter&#xff09;是一种空间高效的概率数据结构&#xff0c;用于判断一个元素是否在一个集合中。它使用位数组和一系列哈希函数来实现。 1. 基本原理 首先…

综合例题及补充

目录 查询员工的编号、姓名、雇佣日期&#xff0c;以及计算出每一位员工到今天为止被雇佣的年数、月数、天数 计算出年 计算月 计算天数 Oracle从入门到总裁:https://blog.csdn.net/weixin_67859959/article/details/135209645 查询员工的编号、姓名、雇佣日期&#xff0c…