当前位置:

首页 > 编程开发 > SpringBoot整合Spring Security过滤器链加载执行流程是什么

SpringBoot整合Spring Security过滤器链加载执行流程是什么

1.引言在SpringBoot项目之中,我们引入SpringSecurity依赖,什么也没做,启动项目SpringSecurity就会生效,访问请求就进行了拦截。SpringBoot对于SpringSecurity提供了自动化配置方案,可以使用更少的配置来使用SpringSecurity。那么这个过滤器链是怎么加载和实现拦截的呢?2.SpringSecurity过滤器链加载1.2.注册名为springSecurityFilterChain的过滤器当SpringBoot项目启动后,SecurityFilte

本文目录

      1.引言

      在 Spring Boot项目之中,我们引入 Spring Security依赖,什么也没做,启动项目 Spring Security 就会生效,访问请求就进行了拦截。

      Spring Boot 对于 Spring Security 提供了自动化配置方案,可以使用更少的配置来使用 Spring Security。

      那么这个过滤器链是怎么加载和实现拦截的呢?

      2.Spring Security过滤器链加载

      1.2.注册名为 springSecurityFilterChain的过滤器

      当 Spring Boot 项目启动后,SecurityFilterAutoConfiguration类会加载 DelegatingFilterProxyRegistrationBean注册过滤器,名字为 springSecurityFilterChain。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      注意:springSecurityFilterChain名字是固定写死的。

      DelegatingFilterProxyRegistrationBean 注册成功后,该过滤器就被加载了到了注册器中。然后调用getFilter()方法生成 DelegatingFilterProxy代理对象并注册到 IOC中 。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      3、查看 DelegatingFilterProxy类

      我们访问项目,就会进入 DelegatingFilterProxy类的 doFilter方法。

      DelegatingFilterProxy类本质也是一个 Filter,其间接实现了 Filter接口,但是在 doFilter中其实调用的从 Spring 容器中获取到的代理 Filter的实现类。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      返回的 FilterChainProxy对象。

      由此可知,DelegatingFilterProxy类通过 springSecurityFilterChain这个名称,得到了一个 FilterChainProxy过滤器,最终执行的是这个过滤器的 doFilter方法。

      验证 springSecurityFilterChain名词不能修改
      查看 initDelegate方法。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      4.查看 FilterChainProxy类

      FilterChainProxy类本质也是一个 Filter,所以查看 doFilter方法。留意该类里面的属性。

      public class FilterChainProxy extends GenericFilterBean {
          private static final Log logger = LogFactory.getLog(FilterChainProxy.class);
          private static final String FILTER_APPLIED =
                  FilterChainProxy.class.getName().concat(".APPLIED");
          // 过滤器链
          private List filterChains;
          private FilterChainProxy.FilterChainValidator filterChainValidator;
          private HttpFirewall firewall;

      4.1 查看 doFilterInternal方法

      惊不惊喜?15个过滤器都在这里了!

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      4.2 查看 getFilters方法

      原来这些过滤器都被封装进 SecurityFilterChain对象中。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      5 查看 SecurityFilterChain接口

      SecurityFilterChain类是个接口,实现类也只有一个 DefaultSecurityFilterChain类。
      DefaultSecurityFilterChain类的构造方法,初始化了 List filters,是通过传参放进去的。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      过滤器链参数是什么时候传入的?

      6. 查看 SpringBootWebSecurityConfiguration类

      创建 Spring Security 过滤器链是交给 Spring boot 自动配置,由 SpringBootWebSecurityConfiguration类创建注入。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      查看 WebSecurityConfigurerAdapter类。

      SpringBoot整合Spring Security过滤器链加载执行流程是什么

      然后会注入 HttpSecurity对象,HttpSecurity可以理解为 Spring Security 的 http核心配置,存放 Spring Security 中的过滤器链、请求匹配路径等相关认证授权的重要方法。

      然后开始创建 Spring Security 过滤器链了,是交给 Spring Boot自动配置,一共有 15个过滤器。
      使用 OrderedFilter进行代理,并设置了order属性。
      添加完成后,将这些过滤器再封装为 DefaultSecurityFilterChain对象。

      最后通过 WebSecurityConfiguration配置加载 springSecurityFilterChain,WebSecurityConfiguration中维护了securityFilterChains属性,会存放过滤器链中所有的过滤器。

      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发
      相关文章 更多
      spring hibernate 详细教程:新手也能快速学会
      spring hibernate 详细教程:新手也能快速学会

      Spring与Hibernate是Java企业开发的核心框架。Spring通过依赖注入管理对象生命周期,简化开发;Hibernate作为ORM工具,实现对象与数据库映射,避免繁琐SQL。两者结合能构建结构清晰、易于维护的应用。教程涵盖环境搭建、实体映射、数据操作及事务管理等实践内容,帮助新手快速掌握整合开发。

      Spring Boot 注册 Servlet 的五种方法(最新整理)
      Spring Boot 注册 Servlet 的五种方法(最新整理)

      在 Spring Boot 里注册 Servlet,其实有不止一种做法,而且每种方式适合的场景也不太一样:有的更偏配置化,有的更适合注解扫描,还有的更强调运行时动态注册。下面把常见的五种方式完整梳理一遍,方便直接对照使用。 一、Spring Boot 提供了 ServletRegistrationB

      从IDEA到Docker部署Spring Boot环境变量配置详解
      从IDEA到Docker部署Spring Boot环境变量配置详解

      一、问题背景 在 Spring Boot 项目里,配置文件用占位符引用环境变量可以说是家常便饭了,比如下面这种写法: url: jdbc:mysql://${datasource_addr:10.xxx.xxx.xxx:5236}/mydb 但有一个现象挺让人头疼的:同样的配置,在 IDEA 里跑得

      Spring MVC+ajax进行信息验证的方法
      Spring MVC+ajax进行信息验证的方法

      采用AJAX与SpringMVC的异步验证,通过XMLHttpRequest对象实现局部数据交换,利用@ResponseBody返回JSON或字符串,结合@RequestBody解析请求体,完成表单无刷新校验,包括用户名重复检测与密码一致性验证。该方法提升交互效率,减少带宽占用,有效确保数据准确性,提升用户体验。

      PHP | Work 2005 讲座之 PHP效率,PHP安全,WebServices
      PHP | Work 2005 讲座之 PHP效率,PHP安全,WebServices

      PHP|Work2005讲座三大主题:PHP效率优化、WebService实现与陷阱、安全防御(注入、XSS等),每份幻灯片超46页,附资源链接下载。

      Spring Security 2026 构建安全、可靠的企业应用实践指南
      Spring Security 2026 构建安全、可靠的企业应用实践指南

      SpringSecurity2026是一款强大的安全框架,提供多因素认证、OAuth2.0与OpenIDConnect协议支持以及强密码管理功能;支持基于角色、权限和表达式的细粒度授权控制;同时涵盖跨站请求伪造与跨站脚本攻击等安全防护最佳实践,助力企业级应用安全构建。

      Spring Security 6+ JWT 配置正确用法详解
      Spring Security 6+ JWT 配置正确用法详解

      SpringSecurity6.x版本废弃了OAuth2ResourceServerConfigurer的jwt()等返回子配置器的方法,改为统一采用Lambda表达式和Customizer方式配置JWT认证。开发者需调用.jwt(Customizer.withDefaults())或自定义解码器,并配合authorizeHttpRequests()完成请求

      如何在 Spring 应用中实现每 15 秒一次的外部 API 调用限流
      如何在 Spring 应用中实现每 15 秒一次的外部 API 调用限流

      在Spring应用中,使用阻塞式RateLimiter与单线程执行器,通过acquire()阻塞实现固定间隔限流,确保外部API调用间隔至少15秒,防止突发请求,方案轻量可靠。

      Spring 中多事务管理器下 @Transactional 的行为解析
      Spring 中多事务管理器下 @Transactional 的行为解析

      在Spring多数据源场景中,@Transactional的REQUIRED级别不会跨不同事务管理器自动合并事务。各事务管理器彼此隔离,无法协调回滚。可通过ChainedTransactionManager将多个管理器串成顺序事务链,实现“全成功才提交,任一失败全部回滚”的近似一致性,但非强事务。

      Spring Data JPA 接入金仓数据库的详细步骤介绍
      Spring Data JPA 接入金仓数据库的详细步骤介绍

      配置Kingbase8Dialect方言并启用自动表结构更新,SpringDataJPA可接入金仓数据库。通过继承JpaRepository实现基础CRUD,支持自定义SQL及分页查询。相比MyBatis减少了手动编写映射文件的工作,显著提升开发效率。

      查看更多
      精品专题 更多
      装机必备
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows
      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程
      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      Mac软件 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      Aperty macOS版
      Aperty macOS版
      macOS

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      WINDOWS 更多
      讯飞智作 网页版
      讯飞智作 网页版
      Windows/ macOS/ Linux

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      火山引擎 网页版
      火山引擎 网页版
      Windows/ macOS/ Linux

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      PixTV 网页版
      PixTV 网页版
      Windows

      PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。