根据查找,发现入口是在 IOC容器 初始化 Bean的时候开始的

说的再具体一点是 IOC在初始化所有的单例Bean的时候。
org.springframework.context.support.AbstractApplicationContext.refresh()方法, finishBeanFactoryInitialization 这个方法

org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration.springSecurityFilterChain()
现在回过头来看下 WebSecurityConfiguration 这个类
/// 普通的一个配置类
@Configuration(proxyBeanMethods = false)
public class WebSecurityConfiguration implements ImportAware, BeanClassLoaderAware {
普通的一个Bean
@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)
public Filter springSecurityFilterChain() throws Exception {
boolean hasConfigurers = this.webSecurityConfigurers != null && !this.webSecurityConfigurers.isEmpty();
boolean hasFilterChain = !this.securityFilterChains.isEmpty();
Assert.state(!(hasConfigurers && hasFilterChain),
"Found WebSecurityConfigurerAdapter as well as SecurityFilterChain. Please select just one.");
if (!hasConfigurers && !hasFilterChain) {
WebSecurityConfigurerAdapter adapter = this.objectObjectPostProcessor
.postProcess(new WebSecurityConfigurerAdapter() {
});
this.webSecurity.apply(adapter);
}
for (SecurityFilterChain securityFilterChain : this.securityFilterChains) {
this.webSecurity.addSecurityFilterChainBuilder(() -> securityFilterChain);
for (Filter filter : securityFilterChain.getFilters()) {
if (filter instanceof FilterSecurityInterceptor) {
this.webSecurity.securityInterceptor((FilterSecurityInterceptor) filter);
break;
}
}
}
for (WebSecurityCustomizer customizer : this.webSecurityCustomizers) {
customizer.customize(this.webSecurity);
}
/ 最重要的看这里
return this.webSecurity.build(); 看这里
}
}
}
再往就是一堆调用,最后发现在落在了

org.springframework.security.config.annotation.web.builders.FilterComparator 这具类里的构造函数。
WebSecurity 设置 HttpSecurity,HttpSecurity 类加载的时候,成员属性初始化 new FilterComparator () ,最后 FilterComparator 这个类的构造函数触发了。
org.springframework.security.config.annotation.web.builders.HttpSecurity
org.springframework.security.config.annotation.web.builders.WebSecurity


3374

被折叠的 条评论
为什么被折叠?



