「技术原理」Spring Security的核心功能和加载运行流程的原理分析

本文深入剖析Spring Security的核心功能,包括Security Filters的工作原理,详细介绍了SecurityFilterChain如何匹配和处理请求。文章还探讨了Spring Security内置的过滤器顺序,如ChannelProcessingFilter、SecurityContextPersistenceFilter、 LogoutFilter等,以及如何通过自动配置来管理过滤器。此外,文章提及了面试中常见的技术复习策略。
摘要由CSDN通过智能技术生成

public interface SecurityFilterChain {

// 匹配请求

boolean matches(HttpServletRequest request);

// 获取该 SecurityFilterChain 中的所有 Filter

List getFilters();

}

复制代码

具体来说,当请求到达FilterChainProxy时,其内部会根据当前请求匹配得到对应的SecurityFilterChain,然后将请求依次转发给到该SecurityFilterChain中的所有 Security Filters。如下图所示:

Security Filters

Spring Security 最终对请求进行处理的就是某个SecurityFilterChain中的 Security Filters,这些Filter都设置为 Bean 注入到 Spring容器中,且这些Filters 的先后顺序很重要。以下是 Spring Security 内置的完整 Security Filter 顺序列表:

  • ChannelProcessingFilter:确保请求投递到要求渠道。最常见的使用场景就是指定哪些请求必须使用HTTPS 协议,哪些请求必须使用 HTTP 协议,哪些请求随便使用哪种协议均可。

  • WebAsyncManagerIntegrationFilter:集成SecurityContext到 Spring Web 异步请求机制中的WebAsyncManager。

  • 注:SecurityContext就是 安全上下文,主要职能就是用于存储用户认证的一些信息。

  • SecurityContextPersistenceFilter:在每次请求处理之前,从 Session(默认使用HttpSessionSecurityContextRepository)中获取SecurityContext,然后将其设置给到SecurityContextHolder;在请求结束后,就会将SecurityContextHolder中存储的SecurityContext重新保存到 Session 中,并且清除SecurityContextHolder中的SecurityContext。

  • SecurityContextPersistenceFilter可以通过HttpSecurity#securityContext()及相关方法引入其配置对象SecurityContextConfigurer来进行配置。

  • HeaderWriterFilter:该过滤器可为响应添加一些响应头,比如添加X-Frame-Options,X-XSS-Protection和X-Content-Type-Options等响应头,让浏览器开启保护功能。

  • HeaderWriterFilter可以通过HttpSecurity#headers()来定制。

  • CorsFilter:处理跨域资源共享(CORS)。

  • CorsFilter可以通过HttpSecurity#cors()来定制。

  • CsrfFilter:处理跨站请求伪造(CSRF)。

  • CsrfFilter可以通过HttpSecurity#csrf()来开启或关闭。在前后端分离项目中,不需要使用 CSRF。

  • LogoutFilter:处理退出登录请求。

  • LogoutFilter可以通过HttpSecurity#logout()来定制退出逻辑。

  • OAuth2AuthorizationRequestRedirectFilter:用于构建 OAuth 2.0 认证请求,将用户请求重定向到该认证请求接口。

  • 注:该过滤器需要添加spring-security-oauth2等相关模块。

  • Saml2WebSsoAuthenticationRequestFilter:基于 SAML 的 SSO 单点登录认证请求过滤器。

  • 注:Saml2WebSsoAuthenticationRequestFilter需要添加 Spring Security SAML 模块。

  • X509AuthenticationFilter:X509 认证过滤器。

  • X509AuthenticationFilter可以通过Securit

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值