我遇到了类似于这个的问题,除了我得到400错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
我正在将应用程序编译为可执行文件。我把css文件放在:
resources\static\css
并在我的home.html资源\ templates下我将其引用为:
<link rel="stylesheet" type="text/css" media="all" th:href="@{/css/my.css}" />
我也试过把它放在:
resources\public\css
同样在文件夹结构中的各个位置,具有各种href值,但对于任何位置/ href,我得到400错误。我错过了什么?
更新:
添加了WebMmvConfig.java:
@EnableWebMvc
public class WebMvcConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}
}
并将链接更改为:
<link rel="stylesheet" type="text/css" media="all" th:href="@{/static/css/cc.css}" />
我仍然遇到同样的错误......
更新2
我在应用程序中完全禁用了Web安全性,并将css文件全部洒在上面以查看它将从何处读取。事实证明它确实从webapp \ css文件夹读取了css文件,而不是资源* ...所以这有效,禁用了Web安全:
<link rel="stylesheet" type="text/css" media="all" th:href="@{css/cc.css}" href="css/cc.css"/>
但是当我启用安全性时,它会因400错误而失败。这是我的配置文件(简而言之):
@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/", "/login**", "/logout**", "/signup").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/my_account", true)
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/");
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.userDetailsService(userDetailsService);
}
}
所以,我想问题是,为什么要从webapp而不是资源加载?