Thymeleaf 3 URL 解析不适​​用于 Spring Boot 4 + Spring Security

Posted

技术标签:

【中文标题】Thymeleaf 3 URL 解析不适​​用于 Spring Boot 4 + Spring Security【英文标题】:Thymeleaf 3 URL resolving not working with Spring Boot 4 + Spring Security 【发布时间】: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);

现在,如果我在构造函数中放置一个断点并强制disableUrlRewritingtrue,它最终会执行HttpServletResponseImpl.isEncodeable,然后在这里失败:

     else if(hreq.isRequestedSessionIdFromCookie()) 
        return false;

在这一点上,我不确定出了什么问题。我找不到任何出现此错误的人,它既不适用于 starter-tomcat 也不适用于 starter-undertow,但我还没有在 Tomcat 中进行彻底的调试。

【问题讨论】:

您期望它解决什么问题? @holmis83 一个上下文相关的 URL 【参考方案1】:

@~/css/login.css 是 Thymeleaf 中的 服务器相关 URL。

如果您想要 上下文相关 URL,请省略波浪号 (~) 字符:

<link rel="stylesheet" href="/css/login.css" data-th-href="@/css/login.css">

详见Standard URL Syntax文章。

【讨论】:

如果我使用它,它仍然会转换为/css/login.css。无论我尝试什么 URL,都会发生同样的事情。【参考方案2】:

你应该使用

<link rel="stylesheet" href="/css/login.css" th:href="@/css/login.css">

没有data-th-href

【讨论】:

与那个相同的问题,它根本无法解决。我什至不明白为什么 disableUrlRewriting 被设置为 true。

以上是关于Thymeleaf 3 URL 解析不适​​用于 Spring Boot 4 + Spring Security的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 不适用于 bootstrap 4 + thymeleaf

customPages url 不适用于解析服务器密码重置

CSS 样式表不适用于 Spring Security + Spring Boot + Thymeleaf

Spring Boot + Thymeleaf css 不适用于模板

Bootstrap 4 webjar css 不适用于 Spring Boot + Thymeleaf

thymeleaf extras security 不适用于 spring Security