尝试将数据从角度项目发布到 Spring Web 服务项目时出现 CORS 错误

Posted

技术标签:

【中文标题】尝试将数据从角度项目发布到 Spring Web 服务项目时出现 CORS 错误【英文标题】:CORS error when trying to POST data from angular project to a Spring Web service project 【发布时间】: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);

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

【问题讨论】:

【参考方案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: *(我忘记了确切的标题)。

以上是关于尝试将数据从角度项目发布到 Spring Web 服务项目时出现 CORS 错误的主要内容,如果未能解决你的问题,请参考以下文章

spring 控制器无法从 $http 角度检索数据

如何将选择标记选项值附加到Web服务角度4

无法将JSON数据访问到角度(.ts)文件中

将数据从 api 插入到材料选择输入角度

如何从 Spring Boot REST Controller 获取角度视图中的用户 ID

将 Spring Web App 从 tomcat 5.5 迁移到 tomcat 6.0 的问题