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

Spring WebSecurityCustomizer 的作用

Spring WebSecurityCustomizer 是 Spring Security 框架中用来 自定义 Web 安全配置 的一个接口。 它的主要作用是在开发中我们能够 精细的控制哪些请求会被 Spring Security 完全忽略,不进行任何安全检查和过滤

我们可以把它想象成是 Spring Security 大门上的一个 “后门” 或者 “快速通道”。

  • Spring Security 的大门: 默认情况下,应用启用了 Spring Security,所有的 HTTP 请求都会经过 Spring Security 的重重安全检查 (例如:身份认证、权限校验、CSRF 防护等等)。 这就像你家的大门,任何访客都要经过你的检查才能进入。

  • WebSecurityCustomizer 的 “后门” / “快速通道”: WebSecurityCustomizer 允许你配置一些特定的 URL 路径,这些路径就像是 “后门” 或 “快速通道”,请求可以直接绕过 Spring Security 的所有安全检查,直接进入你的应用内部。 这就好比你设置了某些人可以直接从后门进入你家,无需经过大门的检查。

WebSecurityCustomizer 主要用于配置以下场景:

  1. 静态资源放行 (Static Resources): 例如 CSS 文件、JavaScript 文件、图片、字体文件等等。 这些静态资源通常是公开访问的,不需要进行身份验证或权限控制。 通过 WebSecurityCustomizer 可以配置忽略对这些静态资源的拦截,提升性能,避免不必要的安全处理。

    • 例如: /css/**, /js/**, /images/** 这些路径下的所有请求都直接放行,不经过 Spring Security 的检查。
  2. 公开 API 或端点 (Public APIs/Endpoints): 有些 API 接口或端点是设计为公开访问的,例如网站的首页、登录页面、注册页面、或者一些无需授权即可访问的公共数据接口。 WebSecurityCustomizer 可以用来配置忽略对这些公开 API 的安全检查。

    • 例如: /public-api/**, /login, /register 这些路径下的请求被忽略。
  3. 健康检查端点 (Health Check Endpoints): 在微服务架构中,健康检查端点通常需要被监控系统定期访问,以判断服务是否正常运行。 这些端点通常也应该公开访问,不需要安全验证。

    • 例如: /health, /actuator/health 这些健康检查端点被忽略。

为什么要使用 WebSecurityCustomizer 而不是其他 Spring Security 配置方式?

  • 完全忽略安全检查: WebSecurityCustomizer 的关键在于 完全忽略 指定路径的 Spring Security 安全处理。 这意味着这些路径的请求 不会经过任何 Spring Security 的过滤器链。 这与 SecurityFilterChain 的配置不同,SecurityFilterChain 是用来 配置如何进行安全处理 (例如:认证方式、授权规则等),而不是完全忽略。

  • 性能优化: 对于不需要安全检查的路径,使用 WebSecurityCustomizer 可以避免不必要的安全处理开销,提升应用的性能。

如何使用 WebSecurityCustomizer?

开发中我们需要创建一个实现了 WebSecurityCustomizer 接口的 Bean,并在 customize(WebSecurity web) 方法中进行配置。 通常使用 web.ignoring() 方法来指定需要忽略的路径模式。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;

@Configuration
public class WebSecurityConfig {

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return new WebSecurityCustomizer() {
            @Override
            public void customize(WebSecurity web) {
                web.ignoring()
                    // 忽略所有 /css/**, /js/**, /images/** 下的请求
                    .antMatchers("/css/**", "/js/**", "/images/**")
                    // 忽略 /public-api/ 开头的请求
                    .antMatchers("/public-api/**")
                    // 忽略 /health 端点
                    .antMatchers("/health");
            }
        };
    }
}

总结:

Spring WebSecurityCustomizer 的作用是:

  • 配置 Spring Security 完全忽略的 URL 路径。
  • 用于放行静态资源、公开 API、健康检查端点等不需要安全检查的请求。
  • 通过 web.ignoring() 方法进行配置。
  • SecurityFilterChain 不同,它不是用来配置安全处理规则,而是完全跳过安全处理。
  • 可以提升应用的性能,避免不必要的安全处理开销。

相关文章:

  • Resume全栈项目(一)(.NET)
  • wokwi arduino mega 2560 - 键盘与LCD显示
  • Go语言中context.Context的
  • DM9162使用记录
  • [计算机三级网络技术]第十一章:网络管理技术
  • Spring WebFlux之ServerWebExchange
  • 从LLM到AI Agent的技术演进路径
  • Qt图形视图框架在项目中的应用
  • 涅槃上岸,入陕进军,复试全程流程开启!
  • C语言编译为可执行文件的步骤
  • Win32 / C++ Windows文件夹路径获取
  • mysql 入门
  • 多层感知机从0开始实现
  • Java设计模式之解释器模式
  • ofd转pdf报错:org.ofdrw.reader.ZipUtil.unZipFileByApacheCommonCompress【已解决】
  • web爬虫笔记:js逆向案例十一 某数cookie(补环境流程)
  • C#委托介绍
  • 算法数论.3(拓展欧几里得,中国剩余定理)
  • 搭建第一个Spring项目
  • 题解:AT_abc170_f [ABC170F] Pond Skater
  • 全国治安管理工作视频会召开
  • 保利、北京建工联合体45.45亿元竞得北京海淀区宅地,溢价率11.95%
  • 短剧植入,撬不动96.4%直男的钱包 | 调研报告
  • 中信银行资产管理业务中心原副总裁罗金辉一审被控受贿超4437万
  • 海口警方通报“司机驾车拖行虐猫”:系意外,未发现故意虐猫行为
  • “宝马女司机驾车拖行虐猫”引关注,海口警方介入调查