【问题标题】:CORS (Cross origin issue) while invoking Spring Rest services from Angular4从 Angular4 调用 Spring Rest 服务时的 CORS(跨源问题)
【发布时间】:2023-03-06 12:37:01
【问题描述】:

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

在研究中,可以选择在服务端包含 CORSFilter,但 UI 调用了大约 30 个服务,它们都是单独的可部署的。

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

请提出建议。

【问题讨论】:

  • 您假设将跨源添加到您的端点(服务器端)。您需要允许发送请求的服务器才能访问服务器端。不知道它在 JAVA 上是如何工作的,但只是在互联网上寻找它。 “向弹簧添加交叉原点”

标签: angular spring-rest


【解决方案1】:

我认为除了在服务器端启用 CORS 之外别无他法。也许您可以封装您的 API 端点,制作一个专用的微服务并在其上启用 CORS

【讨论】:

    【解决方案2】:

    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 在我的应用上添加此内容后,它解决了我的问题。

    【讨论】:

      【解决方案3】:

      我认为,这里的内容远不止眼前所见,重要的是首先了解 CORS,然后尝试找出解决方案,因为人们在 CORS 讨论中引入了诸如 - Angular 等字眼。

      假设您已经开发和部署了 API,打算从部署在某些固定 URL/域的特定 UI 代码中使用。作为服务器,CORS 是一种告诉客户端(如浏览器)的方式,即使我正在处理此请求,但我也告诉您此请求并非来自我作为服务器预期的 UI 域(by默认 - 它必须是相同的来源 )所以你采取必要的行动。当浏览器被服务器标记时,它会抑制服务器响应并显示请求失败。

      以上确实是一个非常简单的描述,您应该了解更多关于同源安全政策。

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

      1. 与Angular无关,与浏览器有关
      2. 它是客户端的特权,如果服务器告诉它请求不是来自 origin / domain ,它是期待的。通常只有网络浏览器实现它,而不是由 curl 等客户端完成

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

      解决方案,

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

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

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

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

      对 30 项服务进行更改不是一个可行的选择,除了 在服务方面进行更改,还有其他选择吗 可用吗?

      我认为除了在服务器端更改代码之外没有其他解决方案。您团队之外的任何人都无法对您提出这些要求,因为部署模型是非常恰当的主题,并且会根据需要从组织到组织进行。

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

      【讨论】:

      • 感谢 Sabir Khan 的详细解释。让我尝试实施建议的更改。
      猜你喜欢
      • 2015-10-15
      • 2013-06-07
      • 2018-05-12
      • 2019-03-17
      • 1970-01-01
      • 2020-09-11
      • 2015-12-03
      • 2019-03-07
      • 2012-04-13
      相关资源
      最近更新 更多