清除浏览器缓存后,发现页面样式不能加载了
这里需要注意一个springboot版本问题:
Spring Boot 1.x和2.x版本拦截器对于静态资源访问的区别!
- Spring Boot 1.x版本已经做好了静态资源映射,所以拦截器不会对.css、.js等静态资源进行拦截
- Spring Boot 2.x版本,静态资源会被拦截器拦截,需要排除静态资源。
1、问题一
问题如下:刚开始访问的时候,样式访问不到(但是在请求中样式并未报错,),但是登录成功后,样式访问成功了,清除缓存后样式又没了。
我们怀疑样式被拦截了,所以我们尝试直接请求静态资源:
发现静态资源确实被拦截了,被拦截后的逻辑如下图,即没有登录前,网页中没有session,这时候请求静态资源是请求不到的。当登录成功后,网页中存在session了,这时再访问静态资源就可以通过拦截器了。
通过在拦截器中配置日志发现,静态资源确实都被拦截了。
解决方法:在拦截器中,将静态资源路径排除,问题就解决了。
排除静态资源后就不会被拦截了:
2、问题二
请求资源被拦截了,但是F12检查的时候发现bootstrap.min.css仍然可以访问到,只不过Content-Type类型不正确,类型应该为text/css,它的类型却是text/html。
主要原因归结于:Resource interpreted as Stylesheet but transferred with MIME type text/html,即原本是CSS文件结果被当作text/html
页面进行解析了。
springboot2.xx既然将静态资源拦截到了,为什么还会返回响应? 期待各位网友的解答!!!
关于这个问题:返回的响应页面都变为了html
spring boot 2.x依赖的spring 5.x版本,相对于spring boot 1.5.x依赖的spring 4.3.x版本而言,针对资源的拦截器初始化时有区别,具体源码在WebMvcConfigurationSupport中。
参考博客:https://blog.csdn.net/ln1593570p/article/details/80607616