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 静态资源访问配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java Annotation(Java 注解)的实现代码

    Java Annotation(Java 注解)的实现代码

    本篇文章介绍了,Java Annotation(Java 注解)的实现代码。需要的朋友参考下
    2013-05-05
  • 基于springboot activiti 配置项解析

    基于springboot activiti 配置项解析

    这篇文章主要介绍了springboot activiti 配置项解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 老生常谈Java虚拟机垃圾回收机制(必看篇)

    老生常谈Java虚拟机垃圾回收机制(必看篇)

    下面小编就为大家带来一篇老生常谈Java虚拟机垃圾回收机制(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • maven多模块打包注意事项详解

    maven多模块打包注意事项详解

    这篇文章主要为大家介绍了maven多模块打包注意事项详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • IDEA2023.3.4开启SpringBoot项目的热部署(图文)

    IDEA2023.3.4开启SpringBoot项目的热部署(图文)

    本文使用的开发工具是idea,使用的是springboot框架开发的项目,配置热部署,可以提高开发效率,文中通过图文介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • java实现在一张大图片上添加小图及文字

    java实现在一张大图片上添加小图及文字

    这篇文章主要介绍了java实现在一张大图上添加小图及文字,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Spring中的@PathVariable注解详细解析

    Spring中的@PathVariable注解详细解析

    这篇文章主要介绍了Spring中的@PathVariable注解详细解析,@PathVariable 是 Spring 框架中的一个注解,用于将 URL 中的变量绑定到方法的参数上,它通常用于处理 RESTful 风格的请求,从 URL 中提取参数值,并将其传递给方法进行处理,需要的朋友可以参考下
    2024-01-01
  • Java实现手写一个线程池的示例代码

    Java实现手写一个线程池的示例代码

    线程池技术想必大家都不陌生把,相信在平时的工作中没有少用,而且这也是面试频率非常高的一个知识点,那么大家知道它的实现原理和细节吗?本文就来通过手写一个简单的线程池框架,去掌握线程池的基本原理,感兴趣的可以学习一下
    2022-10-10
  • 手工体验smtp和pop3协议 邮件实现详解(二)

    手工体验smtp和pop3协议 邮件实现详解(二)

    POP3/IMAP协议定义了邮件客户端软件和POP3邮件服务器的通信规则,这篇文章我们就来手工体验SMTP和POP3协议的奥秘,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • Java实现获取服务器资源(内存,负载,磁盘容量)

    Java实现获取服务器资源(内存,负载,磁盘容量)

    这篇文章主要为大家详细介绍了如何Java实现获取服务器资源信息,包括内存,负载,磁盘容量等内容,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07

最新评论