spring boot 2.x静态资源会被拦截器拦截的原因分析及解决

yizhihongxing

在Spring Boot 2.x版本中,静态资源默认会被拦截器拦截,这是因为Spring Boot引入了WebMvcConfigurerAdapter类,该类覆盖了addResourceHandlers方法,将/**路径下的所有请求都拦截了,并尝试寻找相应的静态资源。

要解决这个问题,需要在自己的项目中进行一些配置。

首先,在项目的配置文件application.properties或application.yml中添加以下配置:

spring.mvc.static-path-pattern=/resources/**

这个配置的含义是,将静态资源的路径前缀修改为“/resources/”,因此拦截器就不会再拦截到静态资源了。

在代码中添加以下配置:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**")
                .addResourceLocations("classpath:/static/");
    }
}

这个类的作用是,将静态资源的路径前缀修改为“/resources/”,并指定静态资源的位置为classpath:/static/。

下面分别通过两条示例说明如何解决这个问题。

示例一:解决css文件被拦截的问题

假设我们有一个样式文件my.css,它的路径为/static/css/my.css,但是在页面中引入该样式文件却出现404错误,这是因为该文件被拦截了。我们可以通过在配置文件中添加配置来解决这个问题,如下:

spring.mvc.static-path-pattern=/assets/**

这样,我们就可以在页面中用“/assets/css/my.css”来引用样式文件了。

示例二:解决JS文件被拦截的问题

在某些情况下,JS文件也可能会被拦截。我们可以通过在代码中添加配置来解决这个问题,如下:

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/my_js/**")
                .addResourceLocations("classpath:/js/");
    }
}

这个配置的含义是,将静态资源的路径前缀修改为“/my_js/”,并指定静态资源的位置为classpath:/js/。在页面中引用JS文件时,可以使用“/my_js/my.js”这样的路径。

通过以上两个示例可以看出,在解决静态资源被拦截的问题时,关键是修改静态资源的路径前缀,并将其与拦截器设置的路径前缀区分开来。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:spring boot 2.x静态资源会被拦截器拦截的原因分析及解决 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)

    下面我将详细讲解“SpringBoot+SpringSecurity处理Ajax登录请求问题(推荐)”的完整攻略。 简介 在Java web开发中,SpringBoot和SpringSecurity组合使用,是非常常见的安全框架,可以很好地保护我们的网站不被非法入侵。但是如果我们使用了Ajax技术来进行登录,就需要对SpringSecurity的登录认证进行…

    Java 2023年5月20日
    00
  • Apache2.2以上版本与Tomcat整合配置及负载均衡实现

    Apache2.2以上版本与Tomcat整合配置及负载均衡实现 前言 当我们想要将Tomcat应用服务器与Apache Web服务器整合在一起使用时,我们可以使用mod_jk这个Apache模块,它可以实现负载均衡和反向代理等功能。本文介绍了如何通过配置mod_jk实现Apache2.2以上版本与Tomcat的整合以及负载均衡实现。 准备工作 在开始整合之前…

    Java 2023年5月19日
    00
  • Spring Boot统一异常处理详解

    下面将以“Spring Boot统一异常处理详解”为主题,为大家详细讲解该主题的完整攻略。 一、什么是 Spring Boot 统一异常处理 Spring Boot 统一异常处理指在 Spring Boot 应用程序中,通过设置全局异常处理器,来捕获和处理抛出的异常信息。通过统一异常处理,我们可以将系统中可能出现的各种异常信息进行分类、归纳和统一处理,并返回…

    Java 2023年5月26日
    00
  • 什么是 GC 日志?

    以下是关于GC日志的完整使用攻略: 什么是GC日志? GC日志是Java虚拟机在进行垃圾回收时所产生的日志信息。它记录了垃圾回收的详细过程,包括垃圾回收的类型、回收的时间、回收的对象数量、回收所占用的时间等。GC日志可以帮助开发人员了解垃圾回收的情况,优化程序的性能和效率。 GC日志的示例 以下是一个Java程序中使用GC日志的示例: public clas…

    Java 2023年5月12日
    00
  • java中random的用法小结

    Java中Random的用法小结 Random类概述 Random类是Java中提供的随机数生成器类,可以生成伪随机数序列。 Random类的实例化构造函数有两种: public Random():默认构造函数,以当前时间戳为种子值来初始化随机数生成器。 public Random(long seed):指定种子值的构造函数,用于初始化随机数生成器。 Ran…

    Java 2023年5月26日
    00
  • 在jmeter的beanshell中用java获取系统当前时间的简单实例

    下面我将详细讲解在JMeter的BeanShell中使用Java获取系统当前时间的简单实例,攻略如下: 1. 利用Java类获取时间戳 我们首先需要了解利用Java类获取时间戳的方式。在Java中,可以使用System.currentTimeMillis()方法获取当前时间的时间戳。具体实现如下: public class CurrentTime { pub…

    Java 2023年5月20日
    00
  • 浅谈JavaScript中promise的使用

    首先需要了解promise是一种异步编程的解决方案,是一个对象,用来进行异步操作的状态管理和结果返回。 一、Promise的基本使用 1. Promise的三种状态 一个Promise对象有三种状态(state): pending(进行中) fulfilled(已成功) rejected(已失败) 2. Promise的基本结构 Promise对象的基本结构…

    Java 2023年5月23日
    00
  • Java代码审计的一些基础知识你知道吗

    Java代码审计的一些基础知识你知道吗 什么是Java代码审计? Java代码审计是指对Java应用程序中的源代码进行检查、识别和评估安全漏洞的过程。此过程旨在识别开发中可能导致安全漏洞的编程错误或不良实践。它可以帮助开发人员找到这些漏洞并修复它们,提高软件的安全性。 Java代码审计的步骤 阅读和理解代码。 理解应用程序的功能并确定期望行为。 寻找不安全的…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部