Spring Boot集成Spring Security之securityFilterChain过滤器链详解
- 一、默认过滤器
- 1、默认配置系统启动日志
- 2、默认配置的过滤器及顺序如下
- 3、本文只介绍和登录相关的过滤器
- 二、SecurityContextPersistenceFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、实现步骤
- 5、关键源码
- 三、LogoutFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、实现步骤
- 5、关键源码
- 四、UsernamePasswordAuthenticationFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、实现步骤
- 5、关键源码
- 五、DefaultLoginPageGeneratingFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、关键源码
- 六、DefaultLogoutPageGeneratingFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、关键源码
- 七、AnonymousAuthenticationFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、关键源码
- 八、ExceptionTranslationFilter
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、关键源码
- 九、FilterSecurityInterceptor
- 1、实现功能
- 2、处理请求类型
- 3、是否会终止过滤器链
- 4、关键源码
- 十、Spring Boot集成Spring Security专栏
一、默认过滤器
1、默认配置系统启动日志
2、默认配置的过滤器及顺序如下
- org.springframework.security.web.session.DisableEncodeUrlFilter
- org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter
- org.springframework.security.web.context.SecurityContextPersistenceFilter
- org.springframework.security.web.header.HeaderWriterFilter
- org.springframework.security.web.csrf.CsrfFilter
- org.springframework.security.web.authentication.logout.LogoutFilter
- org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter
- org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter
- org.springframework.security.web.authentication.ui.DefaultLogoutPageGeneratingFilter
- org.springframework.security.web.authentication.www.BasicAuthenticationFilter
- org.springframework.security.web.savedrequest.RequestCacheAwareFilter
- org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter
- org.springframework.security.web.authentication.AnonymousAuthenticationFilter
- org.springframework.security.web.session.SessionManagementFilter
- org.springframework.security.web.access.ExceptionTranslationFilter
- org.springframework.security.web.access.intercept.FilterSecurityInterceptor
3、本文只介绍和登录相关的过滤器
- SecurityContextPersistenceFilter
- LogoutFilter
- UsernamePasswordAuthenticationFilter
- DefaultLoginPageGeneratingFilter
- DefaultLogoutPageGeneratingFilter
- AnonymousAuthenticationFilter
- ExceptionTranslationFilter
- FilterSecurityInterceptor
二、SecurityContextPersistenceFilter
1、实现功能
- 登陆成功之后的身份认证
2、处理请求类型
- 所有请求
3、是否会终止过滤器链
- 不会
4、实现步骤
- 从认证仓库中(SecurityContextRepository)获取认证信息(SecurityContext,基于session实现),如果为空则创建未认证的认证信息
- 将认证信息设置到认证上下文中(SecurityContextHolder,线程绑定的)中供后续业务使用
- 调用后续过滤器链
- 从认证上下文中获取最新的认证信息
- 清除认证上下文中的认证信息
- 将步骤4中的认证信息添加到认证仓库中
5、关键源码
三、LogoutFilter
1、实现功能
- 清除认证信息
- 重定向登录页面
2、处理请求类型
- 登出提交请求(默认:POST、/logout请求)
3、是否会终止过滤器链
- 登出请求时会终止
4、实现步骤
- 匹配请求地址
- 清除认证信息(CompositeLogoutHandler中注册的LogoutHandler实现类)
- 调用登出成功处理器,默认SimpleUrlLogoutSuccessHandler实现重定向登录页面功能,推荐自定义配置,后续介绍
5、关键源码
四、UsernamePasswordAuthenticationFilter
1、实现功能
- 使用提交的用户名密码生成认证信息
- 根据认证结果做不同处理
2、处理请求类型
- 登录提交请求(默认:POST、/login请求)
3、是否会终止过滤器链
- 认证失败时会终止过滤器链,重定向默认登录地址
- 认证成功时会终止过滤器链,重定向到目标URL地址
4、实现步骤
- 匹配请求地址
- 默认配置:提交的用户名密码和内存中用户名密码匹配,并校验用户和密码的是否有效等信息
- 认证失败时重定向到登录页面
- 认证成功时securityContextRepository中保存SecurityContext
- 重定向到目标URL地址(未认证访问目标地址,会先重定向登录页面,登录成功后再重定向到目标URL地址)
5、关键源码
五、DefaultLoginPageGeneratingFilter
1、实现功能
- 生成默认登录页面
2、处理请求类型
- 登录页面请求(默认GET、/login请求)
- 登录失败
- 登出成功
3、是否会终止过滤器链
- 登录页面请求、登录失败、登出成功时会终止过滤器链
4、关键源码
六、DefaultLogoutPageGeneratingFilter
1、实现功能
- 生成默认登录页面
2、处理请求类型
- 登出页面请求(默认:GET、/logout请求)
3、是否会终止过滤器链
- 登出页面请求时会终止过滤器链
4、关键源码
七、AnonymousAuthenticationFilter
1、实现功能
- 当前认证信息为空时生成匿名认证信息
2、处理请求类型
- 所有请求
3、是否会终止过滤器链
- 不会
4、关键源码
八、ExceptionTranslationFilter
1、实现功能
- 处理FilterSecurityInterceptor抛出的异常,根据异常做相应处理
2、处理请求类型
- 所有请求
3、是否会终止过滤器链
- 认证失败时会重定向登录页面
- 授权失败时会返回错误信息
4、关键源码
九、FilterSecurityInterceptor
1、实现功能
- 认证和授权
2、处理请求类型
- 所有请求
3、是否会终止过滤器链
- 认证或授权失败会抛出异常由ExceptionTranslationFilter处理该异常
4、关键源码
十、Spring Boot集成Spring Security专栏
一、Spring Boot集成Spring Security之自动装配
二、Spring Boot集成Spring Security之实现原理
三、Spring Boot集成Spring Security之securityFilterChain过滤器链详解
四、Spring Boot集成Spring Security之登录登出业务实现逻辑(未完成)
五、Spring Boot集成Spring Security之登录成功后自动认证业务实现逻辑(未完成)
六、Spring Boot集成Spring Security之自定义securityFilterChain过滤器链(未完成)
七、Spring Boot集成Spring Security之自定义基于JWT的用户名密码认证(未完成)
八、Spring Boot集成Spring Security之登录成功后JWT自动认证(未完成)
九、Spring Boot集成Spring Security之验证码认证(未完成)