SpringSecurity6.X默认加载流程

2024-09-12  本文已影响0人  轻轻敲醒沉睡的心灵

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

所以整个流程是: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这个类,在构造方法上打断点,调试查看:

断点
过滤器
上一篇 下一篇

猜你喜欢

热点阅读