news 2026/9/30 6:47:37

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/9/30 0:03:55

Langchain-Chatchat与Argo CD持续交付集成:自动化部署流水线

Langchain-Chatchat 与 Argo CD 持续交付集成:构建可信 AI 应用的自动化部署体系 在企业知识资产日益成为核心竞争力的今天,如何安全、高效地利用私有文档构建智能问答系统,已成为技术架构师面临的关键命题。一个典型场景是:法务部…

作者头像 李华
网站建设 2026/9/29 10:59:34

Langchain-Chatchat与Consul服务发现集成:动态节点管理

Langchain-Chatchat与Consul服务发现集成:动态节点管理 在企业知识系统日益复杂的今天,一个常见的困境是:业务部门积累了海量的PDF、Word文档和内部报告,但员工仍需花费大量时间翻找信息。传统的关键词搜索往往只能匹配字面内容&a…

作者头像 李华
网站建设 2026/9/29 22:45:08

Langchain-Chatchat与Airflow工作流集成:复杂ETL流程调度

Langchain-Chatchat与Airflow工作流集成:复杂ETL流程调度 在金融、法律和医疗等行业,知识更新的时效性直接关系到业务响应速度。某大型保险公司每天需要处理上百份政策修订文件,过去依赖人工导入知识库的方式不仅耗时,还常因遗漏导…

作者头像 李华
网站建设 2026/9/29 16:45:45

验证码实现

验证码实现easy-captcha引入依赖坐标支持的验证码类型SpecCaptcha构造方法获取 / 输出方法样式配置方法验证码实现的代码示例在 Java 开发中,最常用的验证码类型有图片验证码、短信 / 邮箱验证码、行为验证码,在这里我们主要介绍一下图片验证码的相关内容…

作者头像 李华
网站建设 2026/9/29 5:11:00

2.1 CPU脚本性能优化简介

1.帧率与性能瓶颈 2.CPU脚本性能优化1.帧率与性能瓶颈 1).什么是性能瓶颈想象一下你在厨房做饭, 需要同时处理多个任务: 切菜, 炒菜, 调味; 如果切成速度很慢, 那么整个做饭过程就会被拖慢, 切菜就是瓶颈; 游戏开发中的性能瓶颈也是一样的道理当我们玩游戏时, 画面是一帧一帧的…

作者头像 李华
网站建设 2026/9/30 0:36:38

Langchain-Chatchat问答系统压测报告:万级QPS承载能力验证

Langchain-Chatchat问答系统压测报告:万级QPS承载能力验证 在企业知识管理日益智能化的今天,一个能快速响应、准确作答且保障数据安全的本地化AI问答系统,已成为组织提效的关键基础设施。面对员工高频查询制度流程、技术文档等场景&#xff0…

作者头像 李华