用户自定义WebSecurityConfig初始化流程:
WebSecurityConfiguration配置类在初始化时,通过setFilterChainProxySecurityConfigurer方法注入用户自定义WebSecurityConfigurerAdapter对象;
@Autowired(required=false)
public void setFilterChainProxySecurityConfigurer(ObjectPostProcessor<Object> objectPostProcessor,@Value("#{@autowireWebSecurityConfigurersIgnoreParents.getWebSecurityConfigurers()}")List<SecurityConfigurer<Filter,WebSecurity>> webSecurityConfigurers){
....
for(SecurityConfigurer<Filter,WebSecurity> webSecurityConfigurer:webSecurityConfigurers){
this.webSecurity.apply(webSecurityConfigurer);
}
....
}
WebSecurityConfiguration配置类创建springSecurityFilterChain对象时会调用webSecurity对象的build()方法;最终调用到用户自定义配置子类中的configure(WebSecurity)方法和configure(HttpSecurity)方法
@Bean(name = "springSecurityFilterChain")
public Filter springSecurityFilterChain() throws Exception {
...
return this.webSecurity.build();
}
调用关系如下:
build() --> dobuild() --> init() --> init(WebSecurity) --> getHttp() --> configure(HttpSecurity)
--> configure() --> configure(WebSecurity)
核心类:
WebSecurityConfiguration
spring 配置类
核心方法setFilterChainProxySecurityConfigurer函数和springSecurityFilterChain函数参考上面流程介绍;
WebSecurity
创建javax.servlet.Filter对象的SecurityBuilder类
最终通过performBuild()函数创建FilterChainProxy(javax.servlet.Filter的子类)对象
webSecurity 对象有一个重要的 securityFilterChainBuilders 属性,该属性存放HttpSecurity对象(在创建FilterChainProxy对象时,用于创建FilterChainProxy中的List<SecurityFilterChain>属性对象)
HttpSecurity
创建DefaultSecurityFilterChain对象的SecurityBuilder
核心代码:
1.Customizer接口
作用:传入SecurityConfigurer接口的对象,例如:CsrfConfigurer 对象;在自定义function函数中修改对象的配置属性,完成自定义
2.apply函数
作用:将ObjectPostProcessor对象 和 HttpSecurity对象传入具体的SecurityConfigurer 对象中;主要是为之后SecurityConfigurer执行disable 函数时可以调用HttpSecurity对象(完成对HttpSecurity对象的自定义操作)
3.doBuild
通过init函数和configure函数调用各个SecurityConfigurer的init和configure函数
将不同的filter 添加HttpSecurity的filters属性中
HttpSecurity对象通过performBuild函数,将filters添加到创建的DefaulSecurityFilterChain对象中
----------------------------------------------
其中
init 主要初始化DefaultSecurityFilterChain对象RequestMatcher属性相关内容
configure 主要初始化DefaultSecurityFilterChain对象List<Filter> 属性相关内容