news 2026/4/23 19:10: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/4/23 10:50:37

分割链表(dummy的用法)

思路很简单,将小于x的插入到small链表中,大于等于x的插入到large链表,最后将small插到large前面,返回small的头节点。但是插入的步骤很繁琐,需要设置头节点,甚至尾结点,在这里我们使用哨兵头节点…

作者头像 李华
网站建设 2026/4/23 10:57:44

8个AI论文工具,MBA毕业论文高效写作推荐!

8个AI论文工具,MBA毕业论文高效写作推荐! AI 工具助力论文写作,高效又省心 在当前的学术环境中,MBA 学生面临着日益繁重的论文写作任务。从选题到开题、从撰写到降重,每一个环节都需要大量的时间和精力。而 AI 技术的兴…

作者头像 李华
网站建设 2026/4/23 10:57:36

Claude code免费体验+安装方式,对接国产大模型,Node + 配置教程

今天继续给大家介绍AI编程的环境搭建,使用IDE加上一个单独的client agent的这个模式。 在所有的这个agent里面,最好用的就是这个claude code。 Claude Code(简称CC)是目前最受欢迎的独立CLI工具之一,但由于账号申请和…

作者头像 李华
网站建设 2026/4/23 10:50:43

摩托车电动车佩戴头盔检测数据集VOC+YOLO格式1677张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件)图片数量(jpg文件个数):1667标注数量(xml文件个数):1667标注数量(txt文件个数):1667标注类别…

作者头像 李华
网站建设 2026/4/23 10:50:36

【微实验】仿AU音频编辑器开发实践:从零构建音频可视化工具

目录 项目构想与技术选型 核心架构设计 可视化实现的艺术 交互体验的细节处理 遇到的挑战与解决方案 附代码: 性能优化思考 总结与展望 项目构想与技术选型 音频处理涉及多个复杂的技术层面,从文件解码到信号处理,再到可视化呈现。…

作者头像 李华
网站建设 2026/4/23 6:57:56

数据中台权限设计

结合(Spring Security MyBatis-Plus)以及数据中台的通用架构,梳理了一套完整的权限设计方案,包含架构分层、核心设计以及时序交互流程。🏗️ 一、 整体架构设计在数据中台中,权限体系通常分为三个维度&…

作者头像 李华