首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Angular4调用Spring Rest服务时的CORS (跨域问题)

从Angular4调用Spring Rest服务时的CORS (跨域问题)
EN

Stack Overflow用户
提问于 2019-01-24 12:54:17
回答 3查看 121关注 0票数 1

我们有一个用Angular2开发的前端应用程序,服务(REST服务)是用Spring MVC开发的。当前端app即javascript调用服务时,我们面临跨域问题,服务调用不成功。

在研究中,有一个在服务端包含CORSFilter的选项,但UI调用了大约30个服务,所有这些服务都是单独的可部署的。

改变30项服务是不可行的,除了服务方面的改变外,是否还有其他选择呢?

请提个建议。

EN

回答 3

Stack Overflow用户

发布于 2019-01-24 13:59:10

我认为除了在您的服务器端启用CORS之外,别无他法。也许你可以封装你的应用程序接口端点,制作一个专门的微服务,并在上面启用CORS

票数 0
EN

Stack Overflow用户

发布于 2019-01-24 14:27:12

在spring boot中有一个解决方案,你可以在这个链接中找到它:https://spring.io/guides/gs/rest-service-cors/我不是特别确定你需要什么,但是@crossOrigin(-->Link of your site<--)在我这端起作用了。

编辑

这里是这个链接中的全局配置:https://spring.io/guides/gs/rest-service-cors/#_global_cors_configuration在我的应用程序上添加了这个之后,它解决了我的问题。

票数 0
EN

Stack Overflow用户

发布于 2019-01-24 15:38:19

我认为,这里有比表面看起来更多的东西&首先理解CORS是很重要的&然后尝试找出解决方案,因为人们在CORS讨论中引入了-、Angular、等词。

假设您已经开发和部署了,并打算从部署在上的特定UI代码中消费某些固定的URL/域API。作为服务器,CORS是一种告诉客户端(如浏览器)的方式,即使我在为这个请求提供服务,但我也要告诉你,这个请求不是来自我作为服务器所期望的UI域(默认情况下是-它必须是同源),所以你需要采取必要的措施。当浏览器被服务器标记时,它会抑制服务器响应,并显示请求失败。

上面的描述确实非常简单,您应该了解更多关于同源安全策略的信息。

此外,请注意,服务器通过设置关于其支持的来源的响应头来标记客户端,但无论如何都要为响应提供服务,因此到目前为止,您应该了解两点。

  1. 它与Angular无关,而与Browser
  2. 有关,它是客户端的特权,如果服务器告诉它请求不是来自源/域,而是它期望的源/域,它会做什么。通常只有web浏览器才能实现它&不是由、curl、等

等客户端实现的

说了这么多,您是否希望您的API托管在与UI域相同的域中?如果不是,那么您需要更改服务器端代码以显式地告知CORS标头,否则浏览器将继续失败。

解决方案,

1.向每个端点添加注释- org.springframework.web.bind.annotation.CrossOrigin

2.向每个可部署单元添加全局配置,如图示的here。优点是这些工件可以进一步部署到不同的域。

不要只是盲目地复制粘贴这一行,config.addAllowedOrigin("*");,将其设置为您希望服务的特定域,否则拥有此安全性毫无意义。

3.编写另一个可部署的工件来处理CORS等安全问题,这个工件将是接收所有传入请求的前端&然后在构建来自这30个端点的响应后进行响应。客户端不会直接与这30个端点交互,而只能与此工件交互。显然,在与这30个端点相同的域上也需要这个工件。

在30个服务中进行更改并不是一个可行的选择,除了在服务方面进行更改之外,还有没有其他选择?

除了在服务器端修改代码之外,我不认为还有其他解决方案。除了你的团队之外,没有人可以对你指手画脚,因为部署模型是非常合适的主题,并且根据组织之间的需要而定。

源头部在请求中发送,由协议、主机和端口号三部分组成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54339579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档