gpt4 book ai didi

java - 添加 DELETE 端点时,由于 Spring MVC 中的 MIME 类型,资源被阻止

转载 作者:行者123 更新时间:2023-12-01 19:04:40 25 4
gpt4 key购买 nike

我正在使用 Spring Boot v2.1.9.RELEASE 和 Thymeleaf 开发一个 Web 应用程序。该应用程序将服务器端渲染(Spring MVC 常规 Controller )与通过 AJAX 调用的其余 Controller 混合在一起。只要GET,该页面就可以正常工作。和POST是我使用的唯一 HTTP 方法。一旦我添加一个 - 完全不相关,但未使用 - DELETE REST Controller 、CSS 和 JS 资源停止加载,浏览器控制台中显示如下错误:

The resource from “http://localhost:8080/css/demo.css” was blocked due to MIME type (“application/json”) mismatch (X-Content-Type-Options: nosniff)

如果我删除新 Controller ,页面将重新开始工作。

当我使用网络监视器检查请求时,我观察到:

  • X-Content-Type-Options: nosniff header 始终存在于响应中,这与 Spring Security documentation 一致.
  • 如果 DELETE端点不存在,GET /css/demo.css请求返回 HTTP 200代码如预期。两者Accept (请求 header )和 Content-Type (响应头)标记为 text/css .
  • 当我添加端点时,上述请求返回 HTTP 405Accept标题是 text/css但是Content-Type变成application/json 。此外,还添加了一个新的响应 header : Allow: DELETE .

我的猜测是,当 Spring 扫描 Controller 和 DELETE 时找到方法后,会自动添加一些额外的配置,但我找不到任何引用来确认这一点。我想知道为什么会发生这种情况以及如何避免这种行为。

由于我正在本地开发,因此我的 Spring Security 配置非常简单:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Bean
public AuthenticationManagerConfigurer authConfigurer() {
return new InMemoryAuthenticationManagerConfigurer();
}

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
authConfigurer().configure(auth);
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin();
}

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}

我添加的 REST Controller 几乎不执行任何操作:

@RestController
public class MotivosController {

private final String CONTROLLER_PATH = "/rest/motivos/{id}";

@RequestMapping(name=CONTROLLER_PATH, method=RequestMethod.DELETE)
public void deleteMotivo(@PathVariable(name="id") String id) {
logger.debug("Eliminando el motivo " + id);
}

// Other members I consider unrelated to the problem go here...
}

CSS 和 JS 文件正在 template.html 中加载文件放置在src/main/resources/templates下文件夹,如下:

<link type="text/css" href="/css/demo.css" rel="stylesheet" />

最佳答案

答案比我想象的要容易,我的假设完全错误。我将 @RequestMapping 的 name 属性与 value 属性混淆了,因此任何 URL 都与该方法匹配。将 name 更改为 value 使其正常工作。

关于java - 添加 DELETE 端点时,由于 Spring MVC 中的 MIME 类型,资源被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59581986/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com