我有一个非常奇怪的错误,我很确定我错过了一些相当简单的东西,但几个小时之后,我似乎无法接近溶液
我有一个REST端点,方法是DELETE,使用Spring MVC和Spring Boot构建。实现非常简单:
@RequestMapping(value = "/job/{id}", method = RequestMethod.DELETE)
public void deleteJob(@PathVariable("id") String id) {
jobRepository.delete(id);
}
我用角度js用
来调用它$http.delete(backendHost + 'job/' + id)
但是当我执行代码时,我得到了
XMLHttpRequest无法加载 http://localhost:8080/job/578b6e40d2823043482dbdf9。回应 预检请求未通过访问控制检查:否 '访问控制允许来源'标题出现在请求的上 资源。起源' http://localhost:3000'因此是不允许的 访问。响应的HTTP状态代码为403。
我的cors标头已设置并允许任何来源:
@Configuration
@EnableAutoConfiguration
@EnableWebMvc
@ComponentScan
public class Application {
public static void main(String... args) {
SpringApplication.run(Application.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurerAdapter() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "OPTIONS", "POST", "PUT", "DELETE");
}
};
}
}
这只是delete方法的问题。它适用于任何其他方法。如果我将请求更改为GET而不是DELETE,则它可以正常工作。
此外,它仅在从我的angularjs客户端调用删除端点时失败。如果我从基于Web的休息客户端(如Postman)调用完全相同的端点,它可以正常工作。它迫使我设置allowedMethods
,但如果我想要一切,我认为不需要设置它。
我确定我在这里遗漏了一些非常基本的东西。有什么想法吗?