美文网首页
SpringSecurity6.X默认加载流程

SpringSecurity6.X默认加载流程

作者: 轻轻敲醒沉睡的心灵 | 来源:发表于2024-09-12 10:54 被阅读0次

我们先来了解一下SpringSecurity的架构工作流程。Springboot整合Security时,因为用的Tomcat,也就是Servlet容器。security那么多功能(账号密码验证、表单登陆、csrf、重定向等)都是通过一个个过滤器来实现的,按以前的写Filter逻辑,要写好多FilterRegistrationBean,然后在容器启动时都注册到servlet上去,显然这不方便管理,启用,禁用等。

  • 其实,Spring有提供一个过滤器,管理这些注册的过滤器bean,就是 DelegatingFilterProxy。它是Servlet和Spring上下文之间的桥梁,Servlet通过DelegatingFilterProxy管理注册的过滤器bean。
    一般模式
  • 因为security是有很多过滤器的,所以SpringSecurity又提供了一个自己的工具FilterChainProxySecurityFilterChain,将FilterChainProxy注册到Spring的DelegatingFilterProxy中,然后来管理SecurityFilterChain
  • SecurityFilterChain的名字可以看出,它是一个过滤器链,可以包含多个过滤器。我们可以选择security中需要的功能加入到SecurityFilterChain中,也可以根据规则生成多个SecurityFilterChain,交给FilterChainProxy。这就给了我们更好的控制security中各个功能的方式。

所以整个流程是:security的功能Filter加入到SecurityFilterChain,然后SecurityFilterChain注册到FilterChainProxy,最后FilterChainProxy作为一个Filter注册到Spring的DelegatingFilterProxy上,最终到了servlet。

最终模式

1. 默认过滤器

当我们什么都不配置的时候,启动服务,SpringSecurity会加默认的过滤器,这些过滤器由DefaultSecurityFilterChain这个类管理的,我们将日志设置成DEBUG级别,启动时会打印默认使用的过滤器。

1.1 application.yml

添加日志级别

spring.application.name: security-test
spring.security.user.name: zs
spring.security.user.password: zs123
# 添加日志级别
logging.level.org.springframework.security: DEBUG
1.2 重新启动

重启,看控制台日志,后面记录了默认过滤器,有15个


image.png
DisableEncodeUrlFilter, 
WebAsyncManagerIntegrationFilter, 
SecurityContextHolderFilter, 
HeaderWriterFilter, 
CsrfFilter, 
LogoutFilter, 
UsernamePasswordAuthenticationFilter, 
DefaultLoginPageGeneratingFilter, 
DefaultLogoutPageGeneratingFilter, 
BasicAuthenticationFilter, 
RequestCacheAwareFilter, 
SecurityContextHolderAwareRequestFilter, 
AnonymousAuthenticationFilter, 
ExceptionTranslationFilter, 
AuthorizationFilter
1.3 断点查看方式

我们也可以找到DefaultSecurityFilterChain这个类,在构造方法上打断点,调试查看:

断点
过滤器

相关文章

  • Android WebView 优化汇总

    目录 引言:Html加载流程 加载流程各节点耗时分析优化 加载流程结构优化 客户端优化 Html加载流程 创建并初...

  • layout加载流程

    Activity的setContentView加载流程 注意:加载流程没有执行view绘制流程 1、ACtivit...

  • onerror加载默认图片

    定义 加载默认图片

  • maven默认加载

    1、问题:编写xml实现数据库操作时,出现错误:**org.apache.ibatis.binding.Bindi...

  • KEGG 气泡图

    加载R包 加载数据 画图 查看ggplot2的默认字体 查看windows的默认字体

  • SpringBoot 加载外部资源(yml、jar等)

    1. 需求 由于 SpringBoot 打包后,默认是不能加载外部的jar文件,只能默认加载 yml 文件。 想通...

  • iOS底层原理19:类和分类的加载

    前面已经探究了类的加载流程,类分为懒加载类和非懒加载类,他们有不同加载流程,下面来探究下分类的加载,以及分类和类搭...

  • day02-流程控制语句之分支流程

    1.流程控制语句 程序默认有以下一些流程:默认流程 + 分支流程 + 循环流程 2.分支流程 1.单分...

  • iOS深入剖析【离屏渲染】原理

    离屏渲染与正常渲染 屏幕上最终显示的数据有两种加载流程 正常渲染加载流程 离屏渲染加载流程 从图上看,他们之间的区...

  • 四、离屏渲染

    离屏渲染与正常渲染 屏幕上最终显示的数据有两种加载流程 正常渲染加载流程 离屏渲染加载流程离屏渲染与正常渲染 常⻅...

网友评论

      本文标题:SpringSecurity6.X默认加载流程

      本文链接:https://www.haomeiwen.com/subject/lfypljtx.html