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