You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security 6如何配置忽略静态资源文件夹?

Spring Security 6.x 正确配置忽略静态资源的解决方案

问题背景

我将公共Web资源(CSS、JS)存储在java/com/myapp/resources/static/**路径的static文件夹中,原Spring Security 5.x配置可正常运行,但升级至Spring Security 6.0.3版本后,WebSecurity.IgnoredRequestConfigurer不再提供antMatchers(String)方法,替换为requestMatchers后CSS文件仍无法加载。

原配置文件

SecurityConfig.java

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(authorize -> authorize
                        .anyRequest().authenticated())
                .formLogin(form -> form
                        .loginPage("/login")
                        .permitAll());
        return http.build();
    }

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() throws Exception {
        return (web) -> web.ignoring().antMatchers("/resources/static/**");
    }

}

ResourceConfig.java

@Configuration
public class ResourceConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) { 
        registry.addResourceHandler("/static/**")
            .addResourceLocations("classpath:/static/");
    }
    
}

修改后仍失效的配置

@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
    return (web) -> web.ignoring().requestMatchers("/resources/static/**");
}

正确配置方案

问题核心是请求路径匹配错误,结合你的资源映射规则,可通过以下两种方式解决:

方案1:修正WebSecurity忽略的路径

根据ResourceConfig的配置,静态资源的实际访问路径是/static/**(而非/resources/static/**),调整requestMatchers的匹配路径即可:

@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
    return (web) -> web.ignoring()
            .requestMatchers("/static/**");
}

方案2:在SecurityFilterChain中直接放行(推荐)

Spring Security 6更推荐在SecurityFilterChain中统一配置资源权限,无需单独使用WebSecurityCustomizer:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(authorize -> authorize
                        // 优先放行静态资源
                        .requestMatchers("/static/**").permitAll()
                        // 其余请求需认证
                        .anyRequest().authenticated())
                .formLogin(form -> form
                        .loginPage("/login")
                        .permitAll());
        return http.build();
    }
}

可选优化:移除手动资源映射配置

Spring Boot默认已自动配置静态资源映射,classpath:/static/是默认的静态资源目录,访问路径即为/static/**,因此你可以直接删除ResourceConfig类,无需手动配置addResourceHandlers。

验证要点

  • 确认静态资源文件存放在src/main/resources/static/目录下(例如src/main/resources/static/css/style.css)
  • 访问时使用正确路径,如http://localhost:8080/static/css/style.css
  • 若使用模板引擎(如Thymeleaf),引用资源时使用@{/static/css/style.css}格式

内容的提问来源于stack exchange,提问作者Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 03:23:12