SpringBoot 静态资源访问(图片/JS/CSS)配置详解(最新推荐)

 更新时间:2026年04月08日 10:01:16   作者:希望永不加班  
本文主要讲述了SpringBoot静态资源的默认规则、自定义配置、本地映射、外部路径、权限放行、打包部署等内容,重点介绍了SpringBoot对静态资源的自动映射以及如何解决图片上传成功但访问404、JS/CSS加载失败等问题,感兴趣的朋友跟随小编一起看看吧

在 SpringBoot 项目开发中,静态资源访问是前端页面、图片上传、富文本、后台管理系统必备的功能。
很多同学经常遇到:图片上传成功但访问 404、JS/CSS 加载失败、自定义目录不生效、线上环境无法访问等问题。

今天就来讲讲 SpringBoot 静态资源的默认规则、自定义配置、本地映射、外部路径、权限放行、打包部署

一、什么是静态资源?

  • • 图片:jpg、png、gif、webp
  • • 样式:css、less、scss
  • • 脚本:js、ts
  • • 静态页面:html、ico、font
  • • 上传文件:Excel、PDF、视频

SpringBoot 对这些资源提供自动映射,也支持高度自定义

二、SpringBoot 默认静态资源规则(自动生效)

默认 5 个静态资源路径(优先级从高到低):

  • 1. META-INF/resources
  • 2. resources/
  • 3. static/(最常用)
  • 4. public/
  • 5. webapp/

默认访问规则:
直接访问资源名即可,不需要加目录前缀。

示例:

src/main/resources/static/images/logo.png

访问地址:

http://localhost:8080/images/logo.png

三、最常用场景:自定义静态资源映射

实际项目中,我们会把用户上传的图片/文件存放在服务器外部路径,避免项目重新打包文件丢失。

这时候必须用:SpringMVC 资源映射

1. 编写配置类

package com.demo.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
 * 静态资源配置
 */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    /**
     * 静态资源映射
     * 访问路径 /uploads/xxx.jpg  →  映射到本地 D:/uploads/xxx.jpg
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 1. 访问 URL 规则
        registry.addResourceHandler("/uploads/**")
                // 2. 本地真实路径(末尾必须加 /)
                .addResourceLocations("file:D:/uploads/");
        // 2. 也可以配置相对路径
        registry.addResourceHandler("/static/**")
                .addResourceLocations("classpath:/static/");
    }
}

2. 访问示例

本地文件:

D:/uploads/avatar.jpg

访问地址:

http://localhost:8080/uploads/avatar.jpg

四、application.yml 配置静态资源

如果你不想写配置类,可以直接在 yml 中配置:

spring:
  web:
    resources:
      # 自定义静态资源路径
      static-locations: classpath:/static/,classpath:/public/,file:./uploads/

⚠️ 注意:
配置后会覆盖默认路径,不是追加,所以要把需要的路径都写上。

五、静态资源放行(解决 Shiro/Security 拦截 404)

如果项目集成了 Shiro/Spring Security,静态资源会被登录拦截,必须手动放行:

1. Shiro 放行配置

filterMap.put("/static/**", "anon");
filterMap.put("/uploads/**", "anon");
filterMap.put("/**.js", "anon");
filterMap.put("/**.css", "anon");
filterMap.put("/**.png", "anon");
filterMap.put("/**.jpg", "anon");
filterMap.put("/**.ico", "anon");

2. Security 放行配置

http.authorizeRequests()
    .antMatchers("/static/**","/uploads/**","/**.js","/**.css").permitAll()
    .anyRequest().authenticated();

六、自定义 favicon.ico(网站图标)

只需要把 favicon.ico 放到:

resources/static/favicon.ico

SpringBoot 自动加载,无需任何配置。

七、SpringBoot 静态资源缓存(生产优化)

registry.addResourceHandler("/static/**")
        .addResourceLocations("classpath:/static/")
        // 浏览器缓存 10 天
        .setCachePeriod(864000);

八、图片上传 + 回显完整实战

1. 上传接口

@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
    // 上传目录
    String path = "D:/uploads/";
    File dir = new File(path);
    if (!dir.exists()) dir.mkdirs();
    // 文件名
    String fileName = UUID.randomUUID() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
    file.transferTo(new File(path + fileName));
    // 返回可访问的 URL
    String url = "http://localhost:8080/uploads/" + fileName;
    return Result.success(url);
}

2. 配置映射

registry.addResourceHandler("/uploads/**")
        .addResourceLocations("file:D:/uploads/");

九、Linux 服务器部署路径写法

registry.addResourceHandler("/uploads/**")
        .addResourceLocations("file:/usr/local/uploads/");

十、静态资源 404 常见原因

  • 1. 路径末尾缺少 /
    • 错误:/uploads
    • 正确:/uploads/**
  • 2. 本地路径末尾缺少 /
    • 错误:file:D:/uploads
    • 正确:file:D:/uploads/
  • 3. 被拦截器/权限框架拦截
    • 需要放行静态资源
  • 4. Windows 与 Linux 路径格式不一致
    • Windows:D:/uploads/
    • Linux:/usr/local/uploads/
  • 5. 目录权限不足
    • Linux 需要给目录读写权限

十一、SpringBoot 静态资源核心总结

  • 1. 默认路径:static 文件夹直接访问
  • 2. 外部文件:用 addResourceHandler 映射
  • 3. 图片上传:必须用外部路径,避免打包丢失
  • 4. 权限拦截:一定要放行静态资源
  • 5. 路径格式:末尾必须加 /
  • 6. 生产环境:配置缓存提升性能

掌握这些,所有静态资源问题全部解决!

 总结与建议

  • 简单项目:直接使用默认的 src/main/resources/static 目录存放所有静态资源即可,无需任何配置。
  • 需要区分请求:在 application.yml 中设置 spring.mvc.static-path-pattern: /resources/**,为静态资源请求统一加上前缀。
  • 处理上传文件不要使用 static-locations,而是创建一个配置类,通过 addResourceHandlers 方法将特定 URL 映射到磁盘绝对路径

到此这篇关于SpringBoot 静态资源访问(图片/JS/CSS)配置详解(最新推荐)的文章就介绍到这了,更多相关SpringBoot 静态资源访问配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot集成redis之字典缓存详解

    springboot集成redis之字典缓存详解

    Redis的字典缓存是支撑其高性能的一个关键因素,它使得Redis能够以极快的速度处理大量的数据,这篇文章主要介绍了springboot集成redis之字典缓存,需要的朋友可以参考下
    2024-07-07
  • kkfileview Word文件预览乱码异常问题及解决

    kkfileview Word文件预览乱码异常问题及解决

    解决CentOS服务器kkfileview预览乱码问题,需下载中文字体包,上传解压至/usr/share/fonts目录,设置字体权限后重启kkfile及office服务,其他字体可同理操作
    2025-08-08
  • java实现图书馆管理系统

    java实现图书馆管理系统

    这篇文章主要为大家详细介绍了java实现图书馆管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • Mybatis中的@Param及动态SQL详解

    Mybatis中的@Param及动态SQL详解

    这篇文章主要介绍了Mybatis中的@Param及动态SQL详解,@Param是MyBatis所提供的作为Dao层的注解,作用是用于传递参数,从而可以与SQL中的的字段名相对应,需要的朋友可以参考下
    2023-10-10
  • Java字符串查找的三种方式

    Java字符串查找的三种方式

    本篇文章给大家整理了关于Java字符串查找的三种方式,并把其中需要留意的地方做了标注,一起参考学习下。
    2018-03-03
  • java中处理json各种各样的转换方法(推荐)

    java中处理json各种各样的转换方法(推荐)

    下面小编就为大家分享一篇java中处理json各种各样的转换方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • 一文搞明白Java Spring Boot分布式事务解决方案

    一文搞明白Java Spring Boot分布式事务解决方案

    这篇文章主要介绍了一文搞明白Java Spring Boot分布式事务解决方案,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • ThreadLocal导致JVM内存泄漏原因探究

    ThreadLocal导致JVM内存泄漏原因探究

    ThreadLocal是JDK提供的线程本地变量机制,但若使用不当可能导致内存泄漏。正确的使用方式是在使用完后及时remove,或者使用弱引用等手段避免强引用导致的内存泄漏。在多线程编程中,合理使用ThreadLocal可以提高并发性能,但也需要注意其潜在的内存泄漏问题
    2023-04-04
  • 利用Spring boot+LogBack+MDC实现链路追踪

    利用Spring boot+LogBack+MDC实现链路追踪

    这篇文章主要介绍了利用Spring boot+LogBack+MDC实现链路追踪,MDC 可以看成是一个与当前线程绑定的哈希表,可以往其中添加键值对,下文详细介绍需要的小伙伴可以参考一下
    2022-04-04
  • Java如何利用递归计算出阶乘

    Java如何利用递归计算出阶乘

    这篇文章主要介绍了Java如何通过递归计算出阶乘,文中介绍了递归的使用方法和基本特点,以及相关示例代码,对大家的学习有一定的帮助,需要的朋友可以参考下
    2023-05-05

最新评论