spring security 源码阅读(1)之启动配置加载入口

spring security 版本:5.0.5.RELEASE

1、入口类:org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration

关键方法:org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration#setFilterChainProxySecurityConfigurer

应用启动时会进入这里,断点可以看到自定义的三个org.springframework.security.config.annotation.SecurityConfigurer配置;

接着以下代码会将配置赋给WebSecurity,

for (SecurityConfigurer<Filter, WebSecurity> webSecurityConfigurer : webSecurityConfigurers) {
			webSecurity.apply(webSecurityConfigurer);
		}

另一个入口方法,org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration#springSecurityFilterChain;
这里可以看到WebSecurity的构建,
 1 public Filter springSecurityFilterChain() throws Exception {
 2         boolean hasConfigurers = webSecurityConfigurers != null
 3                 && !webSecurityConfigurers.isEmpty();
 4         if (!hasConfigurers) {
 5             WebSecurityConfigurerAdapter adapter = objectObjectPostProcessor
 6                     .postProcess(new WebSecurityConfigurerAdapter() {
 7                     });
 8             webSecurity.apply(adapter);
 9         }
10         return webSecurity.build();
11     }
跟进webSecurity.build(),进入org.springframework.security.config.annotation.AbstractConfiguredSecurityBuilder#doBuild ;

 1 protected final O doBuild() throws Exception {
 2         synchronized (configurers) {
 3             buildState = BuildState.INITIALIZING;
 4 
 5             beforeInit();
 6             init();
 7 
 8             buildState = BuildState.CONFIGURING;
 9 
10             beforeConfigure();
11             configure();
12 
13             buildState = BuildState.BUILDING;
14 
15             O result = performBuild();
16 
17             buildState = BuildState.BUILT;
18 
19             return result;
20         }
21     }

doBuild方法就是用来处理应用中配置的那三个SecurityConfigurer的。

 






















参考:https://www.jianshu.com/p/0c54788c94f3

猜你喜欢

转载自www.cnblogs.com/mylittlecabin/p/11407380.html