WebSecurityCustomizer
是 Spring Security 提供的一个接口,用于配置 Spring Security 应该忽略的请求路径或静态资源。它的主要作用是自定义 Spring Security 不进行安全控制的部分,通常用于排除某些不需要进行身份认证和授权的资源,比如静态资源(CSS、JS、图片等)或某些特定路径。
关键作用
WebSecurityCustomizer
的核心作用是通过配置某些路径,使这些路径不被 Spring Security 的过滤器链拦截或处理。换句话说,这些路径将被直接放行,不需要经过任何安全过滤。
常见用法场景
- 忽略静态资源:例如,你的网站中有静态资源,如 CSS、JavaScript 文件等,这些资源通常不需要认证或权限检查,因此你可以通过
WebSecurityCustomizer
来排除这些请求。 - 排除特定的 API 路径:在某些场景下,可能有些 API 或请求路径是对外公开的,无需任何安全控制,可以使用
WebSecurityCustomizer
来排除这些路径。
示例代码
下面是如何通过 WebSecurityCustomizer
配置静态资源忽略的例子:
import org.springframework.context.annotation.Bean;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SecurityConfig {
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
return (web) -> web.ignoring()
.requestMatchers("/css/**", "/js/**", "/images/**"); // 忽略这些路径
}
}
代码说明
web.ignoring()
:使用WebSecurity
的ignoring()
方法来配置哪些路径不需要经过 Spring Security 的过滤器链。requestMatchers("/css/**", "/js/**", "/images/**")
:匹配/css
、/js
、/images
下的所有资源,这些资源会被忽略,不经过 Spring Security 的处理。
与 HttpSecurity
的区别
WebSecurityCustomizer
与 HttpSecurity
的区别在于:
WebSecurityCustomizer
:完全忽略某些请求,它们不会进入 Spring Security 的过滤器链,适合处理静态资源等无需认证的请求。HttpSecurity
:用于配置哪些请求需要认证和授权,以及如何进行这些操作。它用于控制那些仍然要经过 Spring Security 过滤器链的请求。
常见应用场景
-
静态资源的忽略:如上面的例子,忽略静态资源如
/css/**
,/js/**
等路径。 -
健康检查或公共 API 忽略:对于无需认证的健康检查路径或公开 API,可以直接通过
WebSecurityCustomizer
忽略。例如:web.ignoring() .requestMatchers("/health", "/public/**");
总结
WebSecurityCustomizer
是一个用于配置 Spring Security 忽略特定路径的接口,主要用于排除某些不需要进行安全处理的资源(如静态资源或特定的公共 API)。通过 WebSecurityCustomizer
配置的路径,将不会经过 Spring Security 的认证和授权过滤器。
WebSecurityCustomizer 通常不需要和其他类直接搭配使用,它是一个独立的配置接口,用于定义哪些请求路径或资源不需要进入 Spring Security 过滤器链。在实际使用中,它更多是与 Spring Security 自身的配置体系一起工作,而不是与其他特定类直接关联。