Spring Security 源码详解

Spring Security 源码详解

这里主要介绍 SpringSecurity 的整体流程,方便以后查阅!!!

一、Spring Security过滤器链加载

1、注册 springSecurityFilterChain 过滤器

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

2、查看DelegatingFilterProxyRegistrationBean

DelegatingFilterProxyRegistrationBean 注册成功后,该过滤器就被加载了到了注册器中。

注册器注册了所有的过滤器后,会为每个过滤器生成 DelegatingFilterProxy代理对象并注册到 IoC中 。

3、查看 DelegatingFilterProxy类

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

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

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

首先,进入DelegatingFilterProxy类的 doFilter方法

其次,调用 DelegatingFilterProxy类的 invokeDelegate 方法

然后,调用 FilterChainProxy 类的 doFilter 方法

4、查看 FilterChainProxy类

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

// 过滤器链 private List filterChains;
点击进入doFilter()方法,在进入到 doFilterInternal(request, response, chain) 方法,所有的过滤器:List filters = getFilters(fwRequest)

查看 getFilters方法,原来这些过滤器都被封装进 SecurityFilterChain对象中。

5、查看 SecurityFilterChain接口

SecurityFilterChain 类是个接口,实现类也只有一个 DefaultSecurityFilterChain 类。

DefaultSecurityFilterChain 类的构造方法,初始化了 List filters,是通过传参放进去的。

6、查看 SpringBootWebSecurityConfiguration类

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

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

7、查看 WebSecurityConfigurerAdapter类。

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

初始化方法 init

getHttp 方法

然后,开始创建 Spring Security 过滤器链了,是交给 Spring Boot自动配置,使用 OrderedFilter 进行代理,并设置了order属性。添加完成 后,将这些过滤器再封装为 DefaultSecurityFilterChain对象。
最后,通过 WebSecurityConfiguration配置加载 springSecurityFilterChain,WebSecurityConfiguration中维护了securityFilterChains属性,会存放过滤器链中所有的过滤器。

8、总结

1、Spring boot 通过 DelegatingFilterProxyRegistrationBean 注册过滤器,名为 springSecurityFilterChain,并生成 DelegatingFilterProxy代理对象并注册到 IOC中。

2、最终真正调用 FilterChainProxy 过滤器的 doFilter 获取到 Spring Security 过滤器链。

3、Spring Security 的过滤器链在底层是封装在 SecurityFilterChain 接口中的。

关注林哥,持续更新哦!!!★,°:.☆( ̄▽ ̄)/$:.°★ 。

相关推荐
这个昵称不容易8 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长9 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
文丑颜不良啊10 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼10 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
wo_jack10 小时前
C++ 入门笔记(十六):第16课 vector 模拟实现十问十答 —— 从三指针到迭代器失效
c++·后端·面试·stl·vector
量化分析码农12 小时前
【Python量化波动率实战 02】波动率会传染:EWMA 指数加权给近期行情更大话语权
后端
文丑颜不良啊12 小时前
LeetCode2161~2180题目解析
java·leetcode
GISer_Jing12 小时前
如何学习Agent
后端·langchain
JWASX14 小时前
【Go】map 源码解析 - group
后端·golang·map·源码分析
文丑颜不良啊14 小时前
LeetCode2141~2160题目解析
java·leetcode