带有 Spring Boot 的 Thymeleaf - 找不到静态资产 (CSS)

Posted

技术标签:

【中文标题】带有 Spring Boot 的 Thymeleaf - 找不到静态资产 (CSS)【英文标题】:Thymeleaf with Spring Boot - Cannot Find Static Assets (CSS) 【发布时间】:2019-05-20 01:59:19 【问题描述】:

我在我的 Spring Boot MVC 应用程序中使用 Thymeleaf 模板引擎,但在加载样式时遇到了困难。该链接位于header.html 文件(位于资源/模板/片段下)并在login.html(资源/模板下)中被引用。样式表位于 resources/static/css 目录中。

<head th:fragment="header">
    <link rel="stylesheet" href="../../static/css/bootstrap.css" th:href='@/css/bootstrap.css' />
</head>

登录.html

<html>
<header th:replace="fragments/header :: header"></header>

<body class="container">

    <h1>Login page</h1>
   // Code omitted for brevity

  </body>

</html>

我有一个非常典型的目录结构:

基于此question 和其他来源,似乎应用程序应该能够使用指定的链接加载样式表。然而,这种情况并非如此。具体来说,如果我查看浏览器的网络选项卡,样式表请求返回 302(不是 404),但未应用样式。此外,如果我在 Firefox 中单击“样式编辑器”选项卡,我会收到一条Stylesheet could not be loaded: http://localhost:8080/css/bootstrap.css 消息。

问题可能是什么? 谢谢。

【问题讨论】:

【参考方案1】:

你的链接标签应该是

<link href="../../static/css/bootstrap.css" th:href="@css/bootstrap.css" rel="stylesheet" media="screen"/>

【讨论】:

【参考方案2】:

我觉得应该是

href="/static/css/bootstrap.css"

甚至

href="static/css/bootstrap.css"

一般来说,这个资源可以在下面找到

http(s)://yourdomain/yourApplicationRoot/static/css/bootstrap.css

基本上这是spring默认暴露静态资源的路径。

在您的情况下,它将是 @static/css/bootstrap.css(或以斜线开头)

【讨论】:

感谢您的回复。事实证明,开篇文章中提到的链接是正确的。这个问题实际上是由 Spring Security 引起的; 302 是对登录页面的重定向。我的理解是 Spring Security 自动添加了一个过滤器以使这些资源可以公开访问,但我想情况并非如此,事后看来,这实际上是一个明智、安全的默认设置。

以上是关于带有 Spring Boot 的 Thymeleaf - 找不到静态资产 (CSS)的主要内容,如果未能解决你的问题,请参考以下文章

带有 spring-boot-starter-web 的 Spring Cloud Gateway

带有 spring-boot 和 spring-security 的 JWT

带有 MVC 的 Spring Boot SOAP Web 服务

带有 Spring Boot 的 Spring Restful 服务 - NoSuchBeanDefinitionException

java 带有Spring Boot 1.5的JPA

带有 Spring Boot 中所需的显式 basePackages 的 IntegrationComponentScan?