Spring Boot引入CSS报错No match for GET /css/s.css如何解决
Spring Boot 静态CSS资源加载404问题排查与解决
你遇到的o.s.web.servlet.PageNotFound: No match for GET /css/s.css报错,即使配置了Security放行、路径写法正确、目录结构符合规范,通常由以下几个高频原因导致,按优先级排查即可:
1. Spring Security 规则配置顺序错误
这是90%同类问题的根因
Spring Security的权限匹配规则是自上而下顺序执行,匹配到第一条符合规则就终止后续判断。如果你把.antMatchers("/css/**").permitAll()写在了.anyRequest().authenticated()这类全量拦截规则的后面,放行规则永远不会生效。
正确配置示例:
@Override protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() // 所有放行规则必须写在全量拦截规则之前 .antMatchers("/css/**", "/js/**", "/images/**").permitAll() .antMatchers("/home").permitAll() // 全量拦截规则放在规则列表最后 .anyRequest().authenticated() .and() .formLogin() // 其余业务配置省略 }
如果是Spring Security 5.8+/Spring Boot 3版本,用新APIrequestMatchers替代旧版antMatchers即可,顺序要求完全一致。
2. 自定义MVC配置覆盖了默认静态资源映射
Spring Boot默认会将classpath:/static、classpath:/public、classpath:/resources、classpath:/META-INF/resources目录下的内容映射为根路径可直接访问的静态资源,以下两种操作会导致默认映射失效:
- 自定义配置类继承了
WebMvcConfigurationSupport,且没有手动追加静态资源映射 - 实现
WebMvcConfigurer接口重写addResourceHandlers方法时,没有保留默认静态资源路径映射
修复方式:优先选择实现WebMvcConfigurer接口而非继承WebMvcConfigurationSupport做MVC自定义配置,重写资源映射时追加默认路径规则:
@Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // 自定义业务静态资源映射(如有需要可保留) registry.addResourceHandler("/upload/**") .addResourceLocations("file:./upload/"); // 补充默认静态资源映射规则 registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/") .addResourceLocations("classpath:/public/") .addResourceLocations("classpath:/resources/"); }
3. 静态资源未被编译到项目输出目录
直接打开项目编译输出目录检查:Maven项目看target/classes/static/css路径下是否存在s.css文件,Gradle项目看build/resources/main/static/css路径:
- 如果文件不存在,说明构建工具没有将静态资源打包到输出目录,检查pom.xml/build.gradle中的resources配置,是否存在过滤规则排除了css类型文件
- 排除配置问题后,执行
mvn clean compile或在IDE中触发Rebuild Project重新构建项目即可
4. 其他低概率诱因
- 检查是否配置了自定义拦截器/过滤器,若有需要在拦截器配置中通过
excludePathPatterns("/css/**")排除静态资源路径 - 检查application配置文件中是否手动配置了
spring.mvc.static-path-pattern或spring.web.resources.static-locations修改了默认静态资源规则,若有自定义配置需要和前端引入路径、Security放行规则保持一致 - 确认css文件名、路径没有拼写错误,路径匹配大小写敏感(尤其是部署到Linux环境时)
内容的提问来源于stack exchange,提问作者Богдан Харашук
相关产品推荐
相关产品推荐

