【问题标题】:Spring @CrossOrigin does not work with DELETE methodSpring @CrossOrigin 不适用于 DELETE 方法
【发布时间】:2017-10-19 10:55:50
【问题描述】:

Spring @CrossOrigin 注解不适用于 DELETE 方法。

示例代码(在 Groovy 中):

@CrossOrigin
@RestController
@RequestMapping('/rest')
class SpringController {

    @RequestMapping(value = '/{fileName}', RequestMethod.DELETE)
    void deleteFile(@PathVariable fileName) {
        // logic
    }

}

对于这段代码,我得到了异常:

XMLHttpRequest 无法加载 http://localhost:8080/rest/filename.txt。不 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许使用原点“http://localhost:4200” 使用权。响应的 HTTP 状态代码为 404。

注意事项:

  • 我在 Chrome 58 和 Postman 4.10.7 中对其进行了测试
  • 根据https://spring.io/guides/gs/rest-service-cors/ by 默认 @CrossOrigin 只允许 GET、HEAD 和 POST 跨域 要求。虽然指定 @CrossOrigin(methods = [RequestMethod.GET, RequestMethod.DELETE]) 没有帮助
  • 为简洁起见,我省略了一些代码。实际控制器也有相同映射的 GET 请求,delete 方法有返回类型并产生 JSON 响应,以及其他我认为不会影响问题的小东西。

【问题讨论】:

  • “响应的 HTTP 状态代码为 404。”
  • @sideshowbarker 如果我通过相同的 URL 使用 GET 请求,它可以工作并返回文件,所以我看不到在这个方向上进一步寻找的地方。
  • @Marged 我无法测试它,因为它还没有部署在任何地方,我现在不能这样做。

标签: spring spring-mvc cors http-delete


【解决方案1】:
@Configuration
public class AppConfig extends WebMvcConfigurerAdapter {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
      registry.addMapping("your cross origin url")
            .allowedOrigins("your cross origin host/url")
            .allowedHeaders("Access-Control-Allow-Origin", "*")
            .allowedHeaders("Access-Control-Allow-Headers", "Content-Type,x-requested-with").maxAge(20000)
            .allowCredentials(false)
            .allowedMethods("DELETE");
 }
}

// in your controller
@RequestMapping(value = '/{fileName:.+}', RequestMethod.DELETE)
void deleteFile(@PathVariable fileName) {
    // your custom logic
}

【讨论】:

    【解决方案2】:
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "PUT", "POST", "PATCH", "DELETE", "OPTIONS");
            }
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-04
      • 1970-01-01
      • 2021-09-17
      • 2018-03-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 1970-01-01
      • 2022-11-04
      相关资源
      最近更新 更多