环境:Springboot2.4.12 + Spring Security 5.4.9
本篇主要内容:
Spring Security核心是通过Filter过滤器链来完成一系列逻辑处理的,比如CSRF,认证,授权验证,Session管理等功能,这些过滤器都封装在DefaultSecurityFilterChain中,最终过滤器链会被添加到FilterChainProxy(该过滤器的Bean名称为springSecurityFilterChain)实际的过滤器中。
回顾过滤器FilterChainProxy与过滤器链DefaultSecurityFilterChain的创建过程:
// 1.创建FilterChainProxy过程 public class WebSecurityConfiguration { @Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME) public Filter springSecurityFilterChain() throws Exception { // 当前环境中是否有自定义SecurityConfigurer类(WebSecurityConfigurerAdapter);这里是自动注入的 boolean hasConfigurers = this.webSecurityConfigurers != null && !this.webSecurityConfigurers.isEmpty(); // 当前环境中是否有自定义的SecurityFilterChain过滤器链Bean(这里是自动注入的) boolean hasFilterChain = !this.securityFilterChains.isEmpty(); // 如果当前环境上面的两种情况都存在则会抛出异常。只能有一个成立即可 Assert.state(!(hasConfigurers && hasFilterChain), "Found WebSecurityConfigurerAdapter as well as SecurityFilterChain. Please select just one."); // 如果都不存在,则会创建一个默认的SecurityConfigurer // 当我们项目中只是引入Spring Security包时就是该中情况 if (!