尝试将数据从角度项目发布到 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 错误的主要内容,如果未能解决你的问题,请参考以下文章