springsecurityfilterchain_(六)SpirngSecurity创建springSecurityFilterChain的详细过程

通过上篇文章中的debug分析,目前我们已经知道了以下几个概念:

1、DelegatingFilterProxy

2、springSecurityFilterChain

3、SpringBoot是如何找到SpringSecurity的配置入口SecurityAutoConfiguration

4、SpringSecurity处理请求的基本流程

另外在自动配置类SecurityAutoConfiguration中,引入了配置类WebSecurityEnablerConfiguration

v2-b96b8bee826e4cc373e09fcf526658ab_b.png

v2-fe617f319608cdb342d9e2f1241cf175_b.jpg

还是这个@EnableWebSecurity注解,上篇文章中只是简单的介绍了一下其引入的WebSecurityConfiguration配置类,并且在WebSecurityConfiguration配置类中看到了springSecurityFilterChain的bean定义,下面来看下@EnableGlobalAuthentication注解中有什么内容

v2-d48a03cf0f1d078b3439b2d0166983b4_b.jpg

可以@EnableGlobalAuthentication注解的主要工作其实又是由AuthenticationConfiguration配置类来完成的

v2-c31f0659345effe9a42e5947a9e1ec13_b.jpg

可以看到AuthenticationConfiguration又导入了另一个配置类ObjectPostProcessorConfiguration

v2-08719dba0145f50d54b739dd433e5d3f_b.jpg

v2-53968ba90d95496bb98137bdbca6a933_b.jpg

下面先来简单看下这两个配置类中都有哪些bean,混个眼熟。

一、ObjectPostProcessorConfiguration

post-processor在编程中很常见,可以理解为一个后置处理器。当然前置处理器就是pre-processor。这个配置类中只配置了一个bean:

v2-b5cafc1f04d30041c06e2a304c3035f3_b.png

自动传入的bean是一个AutowireCapableBeanFactory类型的BeanFactory,顾名思义就是具有自动装配能力的beanFactory。

ObjectPostProcessorConfiguration中只是通过AutowireCapableBeanFactory生成了一个名为objectPostProcessor的bean,并没有其他逻辑。

v2-8afc53182e101fbc5f918089c1f4d9ee_b.png

二、AuthenticationConfiguration

authenticationConfiguration配置类中存在四个bean,如下图所示

1、AuthenticationManagerBuilder

v2-c1cc3792a0948e8e2fef58d98a6d84d9_b.jpg

2、GlobalAuthenticationConfigurerAdapter

v2-d79db00dc06b53cc33f4b092220320a0_b.png

3、InitializeUserDetailsBeanManagerConfigurer

v2-1c9578db25fb01189d407f2f86c619be_b.png

4、InitializeAuthenticationProviderBeanManagerConfigurer

v2-e41734705104435054b9364e0a1864ad_b.png

列出上面的bean都是为了混个脸熟,先只需要知道这些bean的存在就行,后面会用到。通过上一篇的debug分析,我们可以知道SpringSecurity框架的入口就是springSecurityFilterChain的doFilter方法。要是想熟悉整个验证流程,则最好从这个方法开始一步步深入。不过在查看doFilter方法之前,先来看下springSecurityFilterChain的初始化细节。

三、springSecurityFilterChain的bean初始化

v2-38f5c41644a97d9700e68fc16bea7217_b.jpg

1、webSecurityConfigurers

初始化bean的第一步用到了这个webSecurityConfigurers的类,在当前类中搜索这个变量:

v2-b3f288ab614686e0af863ab6f03c524e_b.png

可以发现这是个SecurityConfigurer<Filter, WebSecurity>类型的List,来看下它是在哪初始化的。在当前配置类中发现了下面这个方法,@Autowired注解自动注入了两个bean,分别是objectPostProcessor和webSecurityConfigurers。objectPostProcessor在本文最开始的时候我们已经看到了,webSecurityConfigurers是在初始化的呢?

v2-8d3c365d0f37bb5996584bd8066273d1_b.jpg

不过我们可以发现参数之前有个@Value注解:

v2-3ea3348991df157d8cf11fcaecc37121_b.png

这个注解的意思是,webSecurityConfigurers是通过调用beanName为autowiredWebSecurityConfigurersIgnoreParents的bean的getWebSecurityConfigurers()获得的。而这个bean恰好在当前配置类中有定义,来了解下其内部逻辑

v2-e02a736aa08ea863f27c214c44f2a59c_b.png

我们可以看到getWebSecurityConfigurers方法确实存在

v2-16d14564e17822d3b36b2e6eddc1a5bb_b.jpg

通过代码我们可以得知,webSecurityConfigurers其实就是spring上下文中所有WebSecur

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值