过滤器链加载源码

-
spring boot启动中会加载spring.factories文件,在文件中有对应Spring Security的过滤器链的配置信息。
安全过滤器自动配置
org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoCo
nfiguration -
SecurityFilterAutoConfiguration类
@EnableConfigurationProperties({SecurityProperties.class})
@ConditionalOnClass({AbstractSecurityWebApplicationInitializer.class, SessionCreationPolicy.class})
@AutoConfigureAfter({SecurityAutoConfiguration.class})
public class SecurityFilterAutoConfiguration {}
-
SecurityAutoConfiguration类
@ConditionalOnClass({DefaultAuthenticationEventPublisher.class})
@EnableConfigurationProperties({SecurityProperties.class})
@Import({SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class, SecurityDataConfiguration.class})
public class SecurityAutoConfiguration {}
-
WebScurityEnableConfiguration类
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnBean({WebSecurityConfigurerAdapter.class})
@ConditionalOnMissingBean(
name = {"springSecurityFilterChain"}
)
@ConditionalOnWebApplication(
type = Type.SERVLET
)
@EnableWebSecurity
public class WebSecurityEnablerConfiguration {
public WebSecurityEnablerConfiguration() {
}
} -
WebSecurityConfiguration类
/**
* 声明 Spring Security 核心过滤器链(默认名称:springSecurityFilterChain)
* 对应 AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME
*/
@Bean(name = AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME)
public Filter springSecurityFilterChain() throws Exception {
// 检查是否有自定义的 WebSecurityConfigurer 配置
boolean hasConfigurers = webSecurityConfigurers != null && !webSecurityConfigurers.isEmpty();// 如果没有自定义配置,创建默认空适配器(避免构建失败) if (!hasConfigurers) { WebSecurityConfigurerAdapter adapter = objectObjectPostProcessor.postProcess( new WebSecurityConfigurerAdapter() { // 空适配器:仅保证过滤器链能构建,无实际安全规则 @Override protected void configure(org.springframework.security.config.annotation.web.builders.HttpSecurity http) throws Exception { // 6.x 需替换为 http.csrf(AbstractHttpConfigurer::disable) http.csrf().disable(); // 示例:禁用 CSRF(根据业务调整) } } ); webSecurity.apply(adapter); // 将默认适配器应用到 WebSecurity } else { // 如果有自定义配置,遍历应用所有 WebSecurityConfigurer for (WebSecurityConfigurerAdapter configurer : webSecurityConfigurers) { webSecurity.apply(configurer); } } // 构建过滤器链(返回 FilterChainProxy,实现 Filter 接口) Filter filterChain = webSecurity.build(); return filterChain; }
认真流程源码

UsernamePasswordAuthenticationFilter:

UsernamePasswordAuthenticationToken

AuthenticationManager-->ProviderManager-->AbstractUserDetailsAuthenticationProvider

retrieveUser方法

additionalAuthenticationChecks方法

AbstractAuthenticationProcessingFilter--doFilter方法

successfulAuthentication方法

记住我流程源码

AbstractAuthenticationProcessingFilter--successfulAuthentication方法

loginSuccess方法-->onLoginSuccess

RememberMeAuthenticationFilter

autoLogin方法

processAutoLoginCookie方法

CSRF流程源码


授权流程源码

**AffirmativeBased(基于肯定)的逻辑是:**一票通过权
ConsensusBased (基于共识)的逻辑是 **:**赞成票多于反对票则表示通过,反对票多于赞成票则将抛出
AccessDeniedException
**UnanimousBased(基于一致)的逻辑:**一票否决权
FilterSecurityInterceptor

ExceptionTranslationFilter
