1.问题原因:
1.静态资源默认映射路径是这个
private String staticPathPattern = "/**";
如果你没有在application.properties中配置静态资源文件的话,那么默认是映射/**这个路径的。
application.properties
# 配置静态资源
spring.mvc.static-path-pattern=/static/**
2.但是我在WebConfigurer的addInterceptors()方法中添加了这个路径。addPathPatterns("/**");表示拦截所有请求。
就刚好把静态资源默认映射路径给拦截了。而这就是原因所在。
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
2.解决步骤
1.(有两个方法可选)
①在application.properties下配置静态资源映射路径
# 配置静态资源
spring.mvc.static-path-pattern=/static/**
②不在application.properties下配置
# 配置静态资源
#spring.mvc.static-path-pattern=/static/**
而在WebConfigurer的addResourceHandlers()方法中配置静态资源映射路径
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("/static/**");
}
2.在WebConfigurer的addInterceptors()中配置
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register", "/","/static/**");
}
在其中excludePathPatterns()方法中添加"/static/**"
这个方法的作用是不拦截指定的路径
3.下面是我解决完问题后的代码
application.properties
# 配置静态资源
#spring.mvc.static-path-pattern=/static/**
WebConfigurer
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
/**
* 这个方法是用来配置静态资源的,比如html,js,css,等等
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**")
.addResourceLocations("/static/**");
}
/**
* 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
* addPathPatterns 用来设置拦截路径,excludePathPatterns 用来设置白名单,也就是不需要触发这个拦截器的路径
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns("/**") 表示拦截所有的请求,
// excludePathPatterns("/login", "/register")表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register", "/","/static/**");
}
}
或者
application.properties
# 配置静态资源
spring.mvc.static-path-pattern=/static/**
WebConfigurer
@Configuration
public class WebConfigurer implements WebMvcConfigurer {
@Autowired
private LoginInterceptor loginInterceptor;
/**
* 这个方法是用来配置静态资源的,比如html,js,css,等等
*
* @param registry
*/
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//registry.addResourceHandler("/**")
//.addResourceLocations("/static/**");
}
/**
* 这个方法用来注册拦截器,我们自己写好的拦截器需要通过这里添加注册才能生效
* addPathPatterns 用来设置拦截路径,excludePathPatterns 用来设置白名单,也就是不需要触发这个拦截器的路径
*
* @param registry
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
// addPathPatterns("/**") 表示拦截所有的请求,
// excludePathPatterns("/login", "/register")表示除了登陆与注册之外,因为登陆注册不需要登陆也可以访问
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register", "/","/static/**");
}
}
Spring Boot版本
<version>2.1.7.RELEASE</version>
我存放的资源文件
如果有错误,请指正。
希望能帮到各位