当前位置: 首页 > news >正文

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

http://www.cnnetsun.cn/news/158339.html

相关文章:

  • Langchain-Chatchat与Argo CD持续交付集成:自动化部署流水线
  • Langchain-Chatchat与Consul服务发现集成:动态节点管理
  • Langchain-Chatchat与Airflow工作流集成:复杂ETL流程调度
  • 验证码实现
  • 2.1 CPU脚本性能优化简介
  • Langchain-Chatchat问答系统压测报告:万级QPS承载能力验证
  • Langchain-Chatchat支持自定义元数据字段:扩展文档属性信息
  • 双侧独立电驱动车辆转向控制:Matlab/Simulink建模之旅
  • 500kW三相光伏并网逆变器仿真模型探索
  • 基于Optislang的电机多目标优化:以电机气息磁通密度空间某一阶次为优化目标教程
  • 彼得林奇对公司自由现金流转换率的分析
  • 通达信止损价位
  • Langchain-Chatchat与Elasticsearch集成:增强全文检索能力
  • 历年中国海洋大学计算机考研复试上机真题
  • Langchain-Chatchat与OpenAI对比:为何本地化部署更受企业青睐
  • 用 SAT 运行时跟踪自动生成 ABAP 的 UML 时序图:拦截标准生成器,输出 PlantUML,让文档从痛苦变成顺手
  • 什么是护网(HVV)?参加护网需要掌握什么技术?
  • 通过微调通用视觉或时序大模型提升小样本预测能力,或利用生成模型(如GAN、扩散模型)进行高质量数据增强与情景模拟
  • Rust嵌入式开发终极指南:用cross实现DMA驱动的零配置跨编译
  • Carnac:让你的键盘操作惊艳全场!3大核心功能深度解析
  • 5分钟搞定FastGPT上下文管理:让AI对话像真人一样连贯自然
  • Java开发者转型AI应用开发工程师:零门槛入门+框架选型+项目实践
  • 实战分享:如何用FunASR构建游戏语音交互系统
  • iperf3网络性能测试终极指南:Windows与Android双平台完整教程
  • Twisted WebSocket开发指南:构建高性能实时应用
  • 5大实用技巧:轻松掌握Chipsbank APTool V7200量产工具
  • DragonflyDB性能革命:如何突破Redis传统架构的性能瓶颈
  • HTML 与 CSS 基础入门笔记
  • Langchain-Chatchat在物业管理中的应用:业主手册智能咨询服务
  • 0v0.pro、周免:GPT-5.2-CHAT