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

在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集成Auth0 JWT的示例代码

    下面是详细讲解“SpringBoot集成Auth0 JWT的示例代码”的完整攻略,其中包含两条示例。 1. 准备工作 在开始之前,需要确保以下环境已经完成配置: JDK 1.8 Maven IDE(推荐IntelliJ IDEA) 此外,需要在 Auth0 网站上注册并创建一个应用程序,获取应用程序的 Client ID 和 Client Secret。 2…

    Java 2023年5月20日
    00
  • java组件smartupload实现上传文件功能

    下面是关于“java组件smartupload实现上传文件功能”的完整攻略,包含两个示例。 SmartUpload 简介 SmartUpload 是一个 Java 组件,能够方便地实现上传文件的功能。它提供了上传文件的基本方法,并可以使用 Java 类库自身的方法来读取这些文件。SmartUpload 支持批量上传,支持上传时的文件类型检查等功能。 Smar…

    Java 2023年5月19日
    00
  • Java获取当前时间戳案例详解

    标题 Java获取当前时间戳案例详解 介绍 本文主要讲解如何使用Java获取当前时间戳的方法,并提供两个示例。时间戳是一种计算机时间的表示方法,它表示从1970年1月1日0点0分0秒(UTC,即格林威治标准时间)到现在所经过的秒数。 获取当前时间戳的方法 Java中获取当前时间戳的方法有两种: 1.使用Java标准库提供的System.currentTime…

    Java 2023年5月20日
    00
  • SpringBoot实现api加密的示例代码

    什么是API加密? API加密是指对API访问时的数据进行加密处理,确保API的安全性,确保数据在传输过程中不被恶意篡改。 实现API加密的原理 使用SpringBoot框架实现API加密,常用的加密算法有MD5和SHA1。 MD5加密算法可以用以下代码实现: import java.security.MessageDigest; import java.s…

    Java 2023年5月20日
    00
  • Sql中将datetime转换成字符串的方法(CONVERT)

    当从数据库中查询时间信息时,不少时候需要将datetime格式的时间转换为字符串格式。在SQL Server中,我们可以使用CONVERT函数实现该功能。 1. CONVERT函数基本语法 CONVERT(data_type(length), expression, style) 其中,data_type,length参数表示想要转换成的目标数据类型及其长度…

    Java 2023年5月19日
    00
  • JAVA使用JDBC连接oracle数据库的详细过程

    一、安装Oracle数据库和配置1. 下载安装Oracle数据库,安装过程可参考Oracle官方文档。2. 安装完成后,需要在操作系统的环境变量中设置Oracle的环境变量,例如ORACLE_HOME等。3. 在Oracle数据库中创建数据库实例。 二、导入Oracle JDBC驱动在Java项目中使用JDBC连接Oracle数据库需要导入JDBC驱动,以下…

    Java 2023年6月16日
    00
  • SpringMVC前端和后端数据交互总结

    下面是关于“SpringMVC前端和后端数据交互总结”的攻略: 攻略 1. 前端和后端数据交互方式 在SpringMVC中,前端和后端数据交互一般有两种方式:表单提交和AJAX请求。 1.1 表单提交 表单提交是一种比较常见的方式。前端页面通过form表单向后端发送请求,后端接收到请求后会对表单数据进行处理,然后将处理后的结果返回给前端。 以下是一个简单的表…

    Java 2023年5月16日
    00
  • JDBC中Statement和Preparement的使用讲解

    当使用JDBC连接数据库时,通常使用Statement和Preparement来执行SQL语句。本攻略将详细讲解它们的使用。 Statement Statement是用于执行静态SQL语句的对象。它适用于只需要执行简单的SQL语句的场景。下面是Statement的使用示例: String sql = "SELECT * FROM users WHE…

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