SpringBoot - 实现静态资源的访问(附:修改过滤规则、静态资源位置)

一、默认静态资源访问策略

(1)当我们使用 IntelliJ IDEA 创建 Spring Boot 项目,会默认创建 classpath:/static/ 目录,我们直接把静态资源放在这个目录下即可。

(2)我们直接在浏览器中输入“http://localhost:8080/java.png”即可看到我们添加的这张图片。

二、自定义策略

如果默认的静态资源过滤策略不能满足开发需求,也可以自定义静态资源过滤策略,自定义的方式有如下两种。

1,在配置文件中定义

(1)我们在 application.properties 中直接定义过滤规则和静态资源位置: 

  • 过滤规则改为 /static
  • 静态资源位置仍然是 classpath:/static/ 没有变化
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/


(2)重启项目,我们这次可以在浏览器中输入“http://localhost:8080/static/java.png”来访问添加的静态图片。

2,通过 Java 编码定义

原理查看:(901条消息) WebMvcConfigurer 与 WebMvcConfigurationSupport避坑指南_OkidoGreen的博客-CSDN博客https://blog.csdn.net/z69183787/article/details/108587048

或源码:

spring-framework/DelegatingWebMvcConfiguration.java at b595dc1dfad9db534ca7b9e8f46bb9926b88ab5a · spring-projects/spring-framework · GitHubhttps://github.com/spring-projects/spring-framework/blob/b595dc1dfad9db534ca7b9e8f46bb9926b88ab5a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java spring-framework/WebMvcConfigurationSupport.java at b595dc1dfad9db534ca7b9e8f46bb9926b88ab5a · spring-projects/spring-framework · GitHubhttps://github.com/spring-projects/spring-framework/blob/b595dc1dfad9db534ca7b9e8f46bb9926b88ab5a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

(1)这种方式我们只要创建一个类继承 WebMvcConfigurer 接口即可,然后实现该接口的 addResourceHandlers 方法。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

package com.example.demo;

import org.springframework.stereotype.Component;

import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**

 * 静态资源映射

 */

@Component

public class  MyWebMvcConfig implements WebMvcConfigurer {

    @Override

    public void addResourceHandlers(ResourceHandlerRegistry registry) {

        registry.addResourceHandler("/static/**")

                .addResourceLocations("classpath:/static/");

    }

}


(2)重启项目,效果同上面是一样的。我们同样可以在浏览器中输入“http://localhost:8080/static/java.png”来访问添加的静态图片。
原文出自:www.hangge.com  转载请保留原文链接:SpringBoot - 实现静态资源的访问(附:修改过滤规则、静态资源位置)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring Boot,可以通过配置过滤器过滤静态资源。以下是实现步骤: 1. 创建过滤器 创建一个实现javax.servlet.Filter接口的过滤器类,例如: ```java import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @WebFilter(urlPatterns = "/*") public class StaticResourceFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化方法 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 过滤逻辑 chain.doFilter(request, response); } @Override public void destroy() { // 销毁方法 } } ``` 2. 注册过滤器 在启动类上添加`@ServletComponentScan`注解,以扫描并注册过滤器。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.web.servlet.ServletComponentScan; @SpringBootApplication @ServletComponentScan public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } ``` 3. 配置静态资源路径 在application.properties文件配置静态资源路径,例如: ``` spring.resources.static-locations=classpath:/static/ ``` 4. 配置过滤器排除静态资源过滤器的`doFilter`方法,可以通过HttpServletRequest的getRequestURI()方法获取请求的URI,然后判断是否需要过滤静态资源。例如: ```java @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; String requestUri = httpRequest.getRequestURI(); // 判断是否需要过滤静态资源 if (!requestUri.startsWith("/static/")) { chain.doFilter(request, response); } } ``` 通过以上步骤,你可以配置一个过滤器过滤静态资源。注意,如果你使用了Spring Security等安全框架,可能需要在配置排除静态资源的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值