在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技术站