全面解析Spring Security 过滤器链的机制和特性

 更新时间:2020年07月06日 14:59:11   作者:码农小胖哥  
这篇文章主要介绍了Spring Security 过滤器链的机制和特性,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

1. 前言

过滤器作为 Spring Security 的重中之重,我们需要了解其中的机制。这样我们才能根据业务需求的变化进行定制。今天来探讨一下 Spring Security 中的过滤器链机制。

2. Spring Security 过滤器链

客户端(APP 和后台管理客户端)向应用程序发送请求,然后应用根据请求的 URI 的路径来确定该请求的过滤器链(Filter)以及最终的具体 Servlet 控制器(Controller)。

从上图我们可以看出 Spring Security 以一个单 Filter(FilterChainProxy) 存在于整个过滤器链中,而这个 FilterChainProxy 实际内部代理着众多的 Spring Security Filter 。这简直就是套娃啊!

2.1 过滤器链的形成过程

再多说一点 Filter 们的初始化过程,首先 Filter 们按照一定的顺序被 SecurityBuilder 的实现来组装为 SecurityFilterChain ,然后通过 WebSecurity 注入到 FilterChainProxy 中去,接着 FilterChainProxy 又在 WebSecurityConfiguration 中以 springSecurityFilterChain 的名称注册为 Spring Bean 。实际上还有一个隐藏层 DelegatingFilterProxy 代理了 springSecurityFilterChain 注入到最后整个 Servlet 过滤器链中。简单画了个图;

事实上 Spring Security 的内置 Filter 对于 Spring IoC 容器来说都是不可见的。

Spring Security 允许有多 条过滤器链并行,Spring SecurityFilterChainProxy 可以代理多条过滤器链并根据不同的 URI 匹配策略进行分发。但是每个请求每次只能被分发到一条过滤器链。如下图所示:

关于 Filter 的其它细节可以通过 相关文章[1] 了解。

实际每条过滤链 就是一个 SecurityFilterChain

4. 总结

今天我们通过对 Spring Security 中 过滤器链机制,对于深入学习 Spring Security 有着至关重要的意义。有什么问题和心得请留言反馈。

参考资料

相关文章: https://www.felord.cn/spring-security-filters.html

到此这篇关于Spring Security 过滤器链的机制和特性的文章就介绍到这了,更多相关Spring Security 过滤器链内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Solon MVC 的 @Mapping 用法示例说明

    Solon MVC 的 @Mapping 用法示例说明

    SolonMvc框架中的@Mapping注解用于请求路径映射,支持加在public方法或类上,它可以自定义路径、请求方法、内容类型等,支持多种路径映射表达式和参数注入方式,本文给大家介绍Solon MVC的@Mapping 用法示例说明,感兴趣的朋友一起看看吧
    2024-11-11
  • Java实现多线程断点下载

    Java实现多线程断点下载

    这篇文章主要为大家详细介绍了Java实现多线程断点下载的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • java+sqlserver实现学生信息管理系统

    java+sqlserver实现学生信息管理系统

    这篇文章主要介绍了利用java和sqlserver实现学生信息管理系统,违章内容主要建立了与sqlserver数据库的连接开始展开内容,能学到了解JDBC执行SQL的语法,需要的朋友可以参考一下
    2021-12-12
  • Flowable历史查询实例分析

    Flowable历史查询实例分析

    这篇文章主要介绍了Flowable历史查询实例分析,历史是记录流程执行过程中发生的事情,并将其永久存储的组件,与运行时数据不同,历史数据在流程实例完成以后仍保存在数据库中,下面我们来深入了解
    2023-10-10
  • SpringBoot前后端接口对接常见错误小结

    SpringBoot前后端接口对接常见错误小结

    SpringBoot前后端接口对接工作时,经常遇到请求500,400等问题,本文主要介绍了SpringBoot前后端接口对接常见错误小结,感兴趣的可以了解一下
    2022-01-01
  • JAVA中Integer值的范围实例代码

    JAVA中Integer值的范围实例代码

    这篇文章主要介绍了JAVA中Integer值的范围实例代码,需要的朋友可以参考下
    2017-09-09
  • Java 添加、删除、格式化Word中的图片步骤详解( 基于Spire.Cloud.SDK for Java )

    Java 添加、删除、格式化Word中的图片步骤详解( 基于Spire.Cloud.SDK for Java )

    这篇文章主要介绍了Java 添加、删除、格式化Word中的图片( 基于Spire.Cloud.SDK for Java ),本文分步骤通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • java8新特性之日期时间API

    java8新特性之日期时间API

    这篇文章主要介绍了java8新特性之日期时间API,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • Spring Boot集成Mybatis的实例代码(简洁版)

    Spring Boot集成Mybatis的实例代码(简洁版)

    这篇文章主要介绍了Spring Boot集成Mybatis简洁版的教程,需要的朋友可以参考下
    2018-02-02
  • Java数据结构之LinkedList的用法详解

    Java数据结构之LinkedList的用法详解

    链表(Linked list)是一种常见的基础数据结构,是一种线性表。Java的LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器,本文就来简单讲讲它的使用吧
    2023-05-05

最新评论