spring boot拦截器 血战 Thymeleaf引入的static文件

背景

    用BootStrap写了个前端登录页面,用的是Spring boot 官方推荐的Thymeleaf模板引擎,后端用的是继承WebMvcConfigurer的拦截器在进入页面时发现js.css等渲染不成功,F12调试才发现是因为静态文件都被拦截器拦截了,于是就按照网上烂大街的方法:在拦截器里设置excludePathPatterns排除static路径下的拦截
public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginInterceptor).addPathPatterns("/**"). excludePathPatterns("/login","/","/static/**");}
但是还是没有卵用,依然被拦截

原因

经过一番捣鼓,发现是Thymeleaf的原因,前端界面里是这样的

<link rel="stylesheet" th:href="@{css/bootstrap.min.css}" />
<link rel="stylesheet" th:href="@{css/bootstrap-theme.min.css}"/>
<script type="text/javascript" th:src="@{js/jquery-1.11.0.min.js}"></script>
<script type="text/javascript" th:src="@{js/bootstrap.min.js}"></script>

致命的是th:src用@{}方式引入,默认访问static下的文件夹,就导致在游览器里发的请求不是static开头的,所以就导致了上面即使拦截器排除static开头的也没用
血淋淋的证据:spring boot拦截器 血战 Thymeleaf引入的static文件
注意这里我用的是其他游览器,因为Chrome是默认会缓存这些静态文件的,所以即使你刷新或者退出重进也没用,它会从缓存里加载,这一点也要注意。

解决方法

相信看了上面知道怎么回事了,有几种方案
第一:别用Thymeleaf的@{}的默认Content路径,而是:

 <link rel="stylesheet" th:href="@{/static/css/bootstrap.min.css}" />

但是这样还是找不到资源404,因为我们要告诉Spring MVC去哪里找资源文件,默认的是/* * ,我们要改成/static/**
在application.properties里面加上

spring.mvc.static-path-pattern=/static/**

大功告成

第二:那就是还用原来的方法,但是更改静态文件所在的位置,这样
spring boot拦截器 血战 Thymeleaf引入的static文件
然后再更改相应的路径
<link rel="stylesheet" th:href="@{my_new/css/bootstrap.min.css}" />

我用的第一种方法。成功如下。

spring boot拦截器 血战 Thymeleaf引入的static文件