【问题标题】:CORS error when trying to POST data from angular project to a Spring Web service project尝试将数据从角度项目发布到 Spring Web 服务项目时出现 CORS 错误
【发布时间】:2020-07-25 10:04:39
【问题描述】:

我有一个 Angular 前端,我想从我的 Spring Web 服务发布和获取数据。当我尝试向服务发送 POST 数据时,出现以下错误:CORS ERROR

我用来从 Angular 发送 POST 数据的代码是:

  this.http.post(environment.LOGIN_URL, value)
      .map((response: Response) => {
         console.log('TEST');
         //response.json();
      })
      .subscribe();

当使用 GET 时,我使用 this.http.get(environment.LOGIN_URL) etc.. etc.. 这就像预期的那样工作

在我的 spring 服务中,我使用以下方法代码:

@CrossOrigin(origins = "*")
@RequestMapping(value = "/message", method = RequestMethod.GET)
public String index() {
    return "{ \"key\": \"value\", \"foo\": \"bar\", \"aa\": \"bb\" }"; // return test Json data
}

@CrossOrigin(origins = "*")
@RequestMapping(value = "/message2", method = RequestMethod.POST)
public void index(@RequestBody Map<String, Object> payload) {
    System.out.println(payload);
}

}

我已经被这个问题困扰了一段时间,我在互联网上找到的答案似乎对我不起作用。如果我忘记了一些信息,请告诉我!

【问题讨论】:

    标签: angular spring spring-boot cors


    【解决方案1】:

    如果无法建立项目并对其进行测试,这有点困难。但是,您有 WebMVCConfigurer 设置吗?

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
               registry.addMapping("/auth/message").allowedOrigins("*");
            }
        };
    }
    

    另外,我假设您的控制器已将 /auth 定义为 URI 的一部分?

    尝试添加 WebMvcConfigurer bean,并映射到正确的端点。

    您在此处提供的内容看起来应该可以工作,但是设置控制器级别和方法级别 @CrossOrigin 配置没有问题。我会尝试两种方法来缩小问题的范围。尝试在类级别添加@CrossOrigin。

    【讨论】:

    • 您好,感谢您的快速回答。我发现不是 Spring Web 服务造成了这个问题,而是 Spring 网关服务(我的错,应该在帖子中说我也使用它)。我还可以使用这个解决方案还是需要为网关做一些不同的事情?
    • CORS 只是在本地资源上设置一个标头,您的网关正在接收请求并转发它。您还需要网关提供 Allow-Access-Origin: *(我忘记了确切的标题)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 2016-03-23
    • 2021-07-09
    • 1970-01-01
    相关资源
    最近更新 更多