今天打开项目,发现页面的样式没了,用F12调试,果不其然,css,js等样式没有加载成功
后面看控制台发现报 No mapping for GET 静态资源。
很明显,访问静态资源的请求被springboot拦截了。
然后我又看自己写的拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
logger.info("执行InterceptorRegistry");
registry.addInterceptor(localeChangeInterceptor());
registry.addInterceptor(resourceInterceptor).excludePathPatterns("/api/login","/api/regist")
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**",
"/swagger-ui.html/**","/console/**","/static/**");
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
registry.addResourceHandler("/**")
.addResourceLocations("resources/", "public/",
"META-INF/resources/")
.addResourceLocations("classpath:resources/",
"classpath:public/", "classpath:META-INF/resources/")
.addResourceLocations("file:"+hardDisk);
}
我就觉得应该是我的拦截器放行资源这里写的有问题,然后就开始网上各种百度,springboot不拦截静态资源,无非就是extends WebMvcAutoConfiguration 或者实现 implements WebMvcConfigurer 接口。
这样搞来搞去还是不行,最后我在addInterceptors 方法下面打印了一句日志,发现没有打印任何东西。
这样问题的原因就明显了。我配置的拦截器没有生效。
那么这又是为什么呢?
原来前段时间解决跨域的问题,我又写了一个配置类继承了 WebMvcAutoConfiguration类,这样两个配置类就无法同时生效了,只会生效前一个也就是跨域的那个配置类,然后我把跨域的配置类,合并到一个配置类中,这样就没有任何问题了。
注意:如果有几个配置类同时继承了 WebMvcAutoConfiguration ,只会生效其中的一个配置类