(十五)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.hqwc.cn/news/458427.html

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

相关文章

MySQL之建表操作

华子目录 表操作创建表数据类型文本类型数值类型日期/时间类型Bit数据类型常见数据类型 MySQL存储引擎创建表的三个操作创建表时指定存储引擎&#xff0c;字符集&#xff0c;校对规则&#xff0c;行格式 查看表显示数据库中所有表显示数据库中表的信息&#xff08;表结构&#…

航芯ACM32G103开发板评测 06 1.28圆形屏幕 LVGL移植

航芯ACM32G103开发板评测 06 1.28圆形屏幕 LVGL移植 软硬件平台 航芯ACM32G103开发板1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口 GC9A01驱动芯片LVGL V8.3.1源码 LVGL LVGL&#xff08;Light and Versatile Graphics Library&#xff09;是一个免费的开源图形库&…

类与对象(终章)——友元,内部类,匿名对象

这里写目录标题 1. 友元1.2 友元函数1.3 友元类 2. 内部类3.匿名对象 1. 友元 之前实现日期类我们实现输入输出流重载的时候就已经了解了友元的概念&#xff0c;我们今天正式走进友元&#xff0c;详细地学习友元的各种特点与性质。 关键字:friend 1.2 友元函数 友元函数在重载…

基于Java学生管理系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

Springboot简单设计两级缓存

两级缓存相比单纯使用远程缓存&#xff0c;具有什么优势呢&#xff1f; 本地缓存基于本地环境的内存&#xff0c;访问速度非常快&#xff0c;对于一些变更频率低、实时性要求低的数据&#xff0c;可以放在本地缓存中&#xff0c;提升访问速度 使用本地缓存能够减少和Redis类的远…

GridModel事件集合——yonBIP低代码

我们接着看表格相关的事件&#xff0c;用友的文档打不开&#xff0c;真的是天大的404&#xff0c;客观请看这个开发文档网址&#xff0c;找不到了&#xff0c;你说holy 不咯&#xff1f;http://tinper.org/mdf/&#xff08;如果有哪位小伙伴知道这个地址是不是迁移了的话&#…

Ryzen Controller 最新版本下载

Ryzen Controller 最新版本下载 GitLab中最新版本地址&#xff1a; Releases Ryzen Controller Team / Ryzen Controller GitLab 然后语言切换成简体中文&#xff0c;就可以愉快使用啦

兼容ARM 32位架构的edgeConnector产品为用户提供新的部署选项

Softing工业将ARM 32位兼容性集成到了edgeConnector产品中&#xff0c;以满足用户对ARM处理器的边缘设备日益增长的使用需求。 &#xff08;兼容ARM 32位架构的edgeConnector产品扩展了其应用部署范围&#xff09; 用户对采用ARM处理器的紧凑型边缘设备的需求正在大幅增长&…

20、数据结构相关练习20210202

一、请简述栈区和堆区的区别。 1.栈区借助于栈的思想实现&#xff0c;“先进后出”&#xff0c;地址申请从大地址到小地址&#xff1b;堆区借助队列思想实现&#xff0c;“先进先出”&#xff0c;地址申请从小地址到大地址&#xff1b; 2.栈区的内存由计算机自动申请自动释放…

springboot162基于SpringBoot的体育馆管理系统的设计与实现

体育馆管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本体育馆管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕…

【单片机】简单的自定义延时程序设计(代码演示)

前言 大家好吖&#xff0c;欢迎来到 YY 滴 单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

【Django】如何设置支持多语种网站,中文/英文网站

首先&#xff0c;需要明确一点&#xff1a;我们要实现的中英对照翻译&#xff0c;这个翻译不是浏览器翻译的&#xff0c;也不是Django帮你翻译。这个需要你自己事先手动翻译好&#xff0c;存放在专门翻译文件中&#xff0c;Django只是事后调用而已。 第一步 新建项目后&#x…