【发布时间】:2017-06-09 05:08:02
【问题描述】:
在 Spring Boot 4 中使用 Gradle 配置配置 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'
网址解析器无法正确解析 Thymeleaf 视图中的网址:
<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 和false。后者导致以下方法完全禁用 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 中进行彻底的调试。
【问题讨论】:
-
您期望它解决什么问题?
-
@holmis83 一个上下文相关的 URL
标签: java spring spring-boot spring-security thymeleaf