news 2026/6/10 13:32:05

SpringSecurity源码剖析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringSecurity源码剖析

过滤器链加载源码

  1. spring boot启动中会加载spring.factories文件,在文件中有对应Spring Security的过滤器链的配置信息。
# 安全过滤器自动配置 org.springframework.boot.autoconfigure.security.servlet.SecurityFilterAutoCo nfiguration
  1. SecurityFilterAutoConfiguration类
@EnableConfigurationProperties({SecurityProperties.class}) @ConditionalOnClass({AbstractSecurityWebApplicationInitializer.class, SessionCreationPolicy.class}) @AutoConfigureAfter({SecurityAutoConfiguration.class}) public class SecurityFilterAutoConfiguration { }
  1. SecurityAutoConfiguration类
@ConditionalOnClass({DefaultAuthenticationEventPublisher.class}) @EnableConfigurationProperties({SecurityProperties.class}) @Import({SpringBootWebSecurityConfiguration.class, WebSecurityEnablerConfiguration.class, SecurityDataConfiguration.class}) public class SecurityAutoConfiguration { }
  1. WebScurityEnableConfiguration类
@Configuration( proxyBeanMethods = false ) @ConditionalOnBean({WebSecurityConfigurerAdapter.class}) @ConditionalOnMissingBean( name = {"springSecurityFilterChain"} ) @ConditionalOnWebApplication( type = Type.SERVLET ) @EnableWebSecurity public class WebSecurityEnablerConfiguration { public WebSecurityEnablerConfiguration() { } }
  1. 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 15:28:58

Langchain-Chatchat如何处理注释与脚注?保留原始文档细节

Langchain-Chatchat 如何实现注释与脚注的精准保留?深入解析文档细节处理机制 在企业知识管理日益智能化的今天,一个常见的痛点逐渐浮现:我们训练的AI助手回答问题时看似流畅,但缺乏依据——它无法告诉你“这个结论出自哪篇文档、…

作者头像 李华
网站建设 2026/6/10 15:21:32

Langchain-Chatchat问答系统SLA承诺:99.9%可用性保障

Langchain-Chatchat 问答系统:如何实现99.9%的高可用性与私有化智能服务 在企业数字化转型不断深化的今天,一个现实问题日益凸显:大量关键知识散落在PDF、Word文档和内部Wiki中,员工查找制度政策耗时费力,新员工培训周…

作者头像 李华
网站建设 2026/6/10 13:05:24

为什么Dubbo总让人抓狂?这些面试必考的问题都在这了

文章目录Dubbo使用过程中都遇到了些什么问题?引言一、配置问题1. 依赖注入失败2. 数据序列化问题3. 网络通信异常二、性能问题4. 高负载下的性能瓶颈5. 内存泄漏三、服务治理问题6. 服务注册与发现异常7. 负载均衡策略失效8. 容错机制失效四、其他问题9. 数据一致性…

作者头像 李华
网站建设 2026/6/10 14:01:19

风光水火储能系统的调频之旅:Simulink仿真建模分析

风光水火储能系统,一次调频二次调频simulink 仿真建模分析在当今电力系统不断追求高效、稳定与可持续的大背景下,风光水火储能多能互补系统成为了研究热点。其中,调频控制是确保系统频率稳定的关键,一次调频和二次调频更是重中之重…

作者头像 李华