Spring Boot静态资源404本质是路径、配置、拦截规则未对齐;需确认资源放于默认目录(如/static/)、检查拦截器/Spring Security是否放行、验证application.properties未错误覆盖默认路径、排查jar包中资源是否真实存在。

Spring Boot 静态资源 404 错误,本质是请求的 CSS、JS、图片等文件没被正确映射或找不到。不是代码写错了,而是路径、配置、拦截规则这三块没对齐。下面从四个关键点说清楚怎么定位和解决。
确认静态资源放在了默认目录里
Spring Boot 默认只认这几个路径(按优先级从高到低):
- /META-INF/resources/
- /resources/
- /static/(最常用)
- /public/
- /webapp/(仅在传统 WAR 包中生效)
比如你想访问 /css/app.css,就得把文件放在这儿:src/main/resources/static/css/app.css。
别放在 src/main/webapp/css/ 或 src/main/resources/css/ —— 后者不在扫描范围内,必然 404。
检查是否被拦截器或 Spring Security 拦截了
如果你写了自定义拦截器(实现 HandlerInterceptor),它默认会拦截所有请求,包括 /js/xxx.js 这类静态资源。
必须显式放行,常见写法:
- 在
preHandle方法里加判断:if (!(handler instanceof HandlerMethod)) return true; - 或者更稳妥地,在拦截器配置中排除静态路径:
registry.excludePathPatterns("/css/**", "/js/**", "/images/**"); - 用了 Spring Security?在
SecurityConfiguration中加:requestMatchers("/css/**", "/js/**", "/images/**").permitAll()
验证 application.properties 是否覆盖了默认配置
有些项目为了“统一管理”会手动改静态资源路径,比如写了:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
spring.web.resources.static-locations=classpath:/custom-static/
这会完全替换掉默认的 5 个路径,而不是追加。结果就是:哪怕你把文件放对了 /static/,也找不到。
解决办法:
- 删掉这行配置,用默认行为最稳
- 如果真要自定义,务必写全所有需要的路径,例如:
spring.web.resources.static-locations=classpath:/static/,classpath:/public/,classpath:/resources/
排查打包后 jar 包里的资源是否真的存在
开发时能访问,打成 jar 后 404?大概率是 Maven 打包没包含 static 目录。
检查 pom.xml 的 <build> 配置:
- 确保没有错误地把
src/main/resources排除在外 - 不要手动配置
<resources>却漏掉了static目录 - 用命令验证 jar 内容:
jar -tf your-app.jar | grep "static/css"
如果没输出,说明资源根本没打进包里,得回头修构建配置。

















