首先要说的是,我已经寻找解决方案有一段时间了,现在我很绝望。
当 Spring Boot 运行时,我无法从 html 页面访问 css 文件。
html.文件
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org"
xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">
<head lang="en">
<title th:text='#{Title}'>AntiIntruder</title>
<meta charset="UTF-8" />
<link rel="stylesheet" type="text/css" media="all" href="../assets/css/style.css" th:href="@{/css/style.css}" />
</head>
<body>
...
应用程序.java
@SpringBootApplication // adds @Configuration, @EnableAutoConfiguration, @ComponentScan
@EnableWebMvc
public class Application extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/*");
}
}
文件夹结构:
我尝试将
css
文件夹放入 static
文件夹和/或删除 addResourcesHandlers,通过相对路径引用 css 和其他一些东西。似乎没有什么可以解决这个问题。
如果您尝试解决此问题但没有找到解决方案,请告诉我,以便我知道我不会被忽视。
1。使用自定义资源路径
在您的网络配置中
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/assets/**")) {
registry.addResourceHandler("/assets/**").addResourceLocations("classpath:/assets/");
}
}
将您的
style.css
文件放入此文件夹中
src/main/resources/assets/css/
之后在你的看法中
<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />
.
2。在 Spring Boot 中使用预定义路径
从网络配置中删除
addResourceHandlers
将
style.css
放入以下任意文件夹中
src/main/resources/META-INF/resources/assets/css
src/main/resources/resources/assets/css/
src/main/resources/static/assets/css/
src/main/resources/public/assets/css/
并且在视图中
<link rel="stylesheet" type="text/css" th:href="@{/assets/css/style.css}" />
.
注意:您可以在此处删除
assets
文件夹。如果您想这样做,请将其从预定义的资源文件夹以及视图中删除 th:href
。但我保持原样,因为您在问题中明确提到了 assets/
路径。所以我相信您的资源 URL 中必须包含 assets/
。
问题出在
@EnableWebMvc
文件中的 Application.java
注释。我一删除那个,CSS 就开始在 localhost:8080/css/style.css
可用,但没有应用。到目前为止我还没有找到导致问题的原因。然后我删除了映射到我实现的
@EnableWebMvc
的控制器,以显示自定义错误页面。
/**
删除这个之后,我的 CSS 就可以工作了。 =)
@RequestMapping("/**")
public String notFound() {
return "errors/404";
}
或者如果您确实想将它们放入资产文件夹中:
.../static/css/app.css
在这两种情况下,CSS 都应该可以通过使用
.addResourceLocations("classpath:/assets/") <-- without the * at the end
.../assets/css/app/css
文件夹
th:href="@{/css/app.css}"
文件夹放在
css
文件夹下,删除 addResourcesHandlers 并使用绝对路径访问 css(例如 static
)。/css/style.css
成为
<link rel="stylesheet" type="text/css" media="all" href="../assets/css/style.css" th:href="@{/css/style.css}">
我花了几个小时尝试各种配置和文件路径重命名。 不知道为什么,但这是唯一让我的 css 和 js 在 Spring Boot 5 中加载的东西。
<link rel="stylesheet" th:href="@{/css/bootstrap.css}">
所以现在你可以像这样覆盖你的 HttpSecurity 配置
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
//and overide this configuration method like this
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/webjars/**", "/resources/**");
}
}
如果您使用的是像 bootstrap 这样的 webjars 库,请将此配置添加到您的 WebSecurityConfiguration
@EnableWebSecurity
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter{
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/index").anonymous()
.antMatchers("/**/*.*").permitAll()
.anyRequest().authenticated();
}
}
this ("/**/*.*") regex text will allow files with anny extension
此链接位于/templates/file.html
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
我添加了application.properties
<link rel="stylesheet" type="text/css" media="all" ref="../static/css/styles.css">
我的CSS路径是
spring.mvc.static-path-pattern=/static/**
src/main/resources/static/css/
这对我有用