使用 Gradle 配置在 Spring Boot 4 中配置 Thymeleaf 3 后
compile('org.springframework.boot:spring-boot-starter-thymeleaf')
compile('org.thymeleaf:thymeleaf:3.0.3.RELEASE')
和
ext['thymeleaf.version'] = '3.0.3.RELEASE'
ext['thymeleaf-layout-dialect.version'] = '2.1.2'
URL 解析器无法正确解析 Thymeleaf View 中的 URL:
<link rel="stylesheet" href="/css/login.css" data-th-href="@{~/css/login.css}">
简单地变成
<link rel="stylesheet" href="/css/login.css">
我已经做了一些调试,首先,在请求期间我注意到 SaveToSessionResponseWrapper ( SaveContextOnUpdateOrErrorWrapper 的子部分)像这样初始化:
public SaveContextOnUpdateOrErrorResponseWrapper(HttpServletResponse response,
boolean disableUrlRewriting) {
super(response);
this.disableUrlRewriting = disableUrlRewriting;
}
传递的参数是 FireWalledResponse和假
。后者会导致以下方法完全禁用 URL 转发:
@Override
public final String encodeURL(String url) {
if (this.disableUrlRewriting) {
return url;
}
return super.encodeURL(url);
}
现在,如果我在构造函数中放置一个断点并强制 disableUrlRewriting
为 true
,它最终会执行 HttpServletResponseImpl.isEncodeable然后在这里失败:
} else if(hreq.isRequestedSessionIdFromCookie()) {
return false;
此时我不确定出了什么问题。我无法找到任何出现此错误的人,并且它既不适用于 starter-tomcat
也不适用于 starter-undertow
,但我还没有在 Tomcat 中进行彻底的调试。
最佳答案
@{~/css/login.css}
是 Thymeleaf 中的服务器相对 URL。
如果您需要上下文相关 URL,请省略波形符 (~) 字符:
<link rel="stylesheet" href="/css/login.css" data-th-href="@{/css/login.css}">
参见Standard URL Syntax文章了解详细信息。
关于java - Thymeleaf 3 URL 解析不适用于 Spring Boot 4 + Spring Security,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41827544/