带有 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
带有 Spring Boot 中所需的显式 basePackages 的 IntegrationComponentScan?