过滤器链加载源码

- 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

2403

被折叠的 条评论
为什么被折叠?



