Spring Security的架构
- Spring Security提供了三个顶级的配置对象,AuthenticationManagerBuilder。、、HttpSecurity、WebSecurity,这三个虽然都是代码意义上的顶级构建对象,但逻辑上只有WebSecurity是最顶级的,WebSecurity的构建要依赖HttpSecurity,而HttpSecurity的构建要依赖AuthenticationManagerBuilder。
- WebSecurityConfigurerAdapter是对外提供自定义配置的ConfigurerAdapter,其提供了对上边三个顶级对象的构建的回调方法,这里注意,有两个是内部回调,一个是接口回调:
- WebSecurityConfiguration中有个setFilterChainProxySecurityConfigurer方法,用@Autowired标识了,容器启动的时候就会调用这个方法,这个方法里做了三件事
- new一个webSecurity这个逻辑顶级对象
- 使用AutowiredWebSecurityConfigurersIgnoreParents对象收集所有的自定义配置的ConfigurerAdapter
- 将收集的WebSecurityConfigurerAdapter对象添加到WebSecurityConfiguration持有的WebSecurity对象中。
- Configuration中有个标识了@Bean的方法,调用了webSecurity.build()方法,build方法中有init流程和configure流程,init流程中会调用所持有的WebSecurityConfigurerAdapter对象的init方法,configure会调用所持有的所有的WebSecurityConfigurerAdapter的configure方法。performBuild方法将所有的配置产生的所有的Filter用filterChainProxy整合,返回一个FilterChainProxy对象。
- 整个Spring Security的目的就是为了构建上边的Filter对象。