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

标签 java spring spring-boot spring-security thymeleaf

使用 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);
}

现在,如果我在构造函数中放置一个断点并强制 disableUrlRewritingtrue,它最终会执行 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/

相关文章:

java - sax 解析器 stringbuilder 只返回一行

java - 在maven中指定依赖

spring - 使用 Spring JmsMessagingTemplate 的自定义 MessageConverter 未按我的预期工作

java - 如何获取 Camel 处理器中的用户角色? (Spring Security + REST 服务 + Camel)

java - 部署 Web 应用程序后出现“连接过多”错误

java - cucumber 与 JUnit java.lang.ExceptionInInitializerError

Java 泛型,创建 Class<T> 的实例

java - 如何在 vs 代码中调试 Java maven spring-boot 应用程序?

java - 获取所有项目的映射方法返回一个空列表

java - spring:在每个 Controller 模型中添加 session 属性