美文网首页
SAP Spartacus CORS 设置

SAP Spartacus CORS 设置

作者: 华山令狐冲 | 来源:发表于2021-10-03 09:14 被阅读0次

Cross-Origin Resource Sharing (CORS)

CORS 是 Web 上的一种标准机制,它使来自 Web 应用程序的跨域请求能够到达不同域上的服务器。 只要响应中没有所需的 HTTP 标头,浏览器就会阻止跨源请求。

响应标头由服务器指定,这就是为什么必须设置服务器以生成正确的标头的原因。 在 SAP Commerce Cloud 后端,可以使用 CorsFilter 以通用方式配置这些标头。 可以使用项目属性为每个节点配置此属性,或者可以使用 ImpEx 安装脚本安装到每个节点。

SAP Commerce 支持跨域资源共享机制。 CORS 机制为浏览器和服务器定义了一种方式,可以决定允许或不允许对受限资源的跨域请求。

想象一下 http://www.example.com/somepage.html 上的脚本想要从 https://www.example.com:87/resources 访问资源。 您的浏览器将这两个地址视为两个不同的来源,它将阻止 /somepage.html 脚本从 /resources 获取资源。 通过以接受 /somepage.html 请求的方式准备 CORS 配置,可以安全地放宽此限制。

Enabling CORS Support in SAP Commerce Extensions

要在 SAP Commerce 扩展中启用 CORS 支持,请将这些部分包含在所选扩展的 [extname]-web-spring.xml 文件中。

extname-web-spring.xml:

<bean id="extnamePlatformFilterChain" class="de.hybris.platform.servicelayer.web.PlatformFilterChain">
  <constructor-arg>
    <list>
      <ref bean="corsFilter"/>
      [...]
    </list>
  </constructor-arg>
</bean>

Configuring CORS in SAP Commerce Web Applications

Global Cluster Configuration

CORS 配置存储在 CorsConfigurationProperty 项内的数据库中。 它是全局的,适用于连接到集群的所有节点。

要编辑您的配置,请在后台转到系统 CORS 过滤器 CorsConfigurationProperty 并创建或修改 CorsConfigurationProperty 类型的实例。

CORS Headers

allowedOrigins

在开发中,允许的来源通常用星号 (*) 配置,这会将所有客户端列入许可名单,无论其域如何。 在生产环境中,这应该包含允许与后端 API 交互的不同域。

allowedMethods

允许的标头必须包括所有允许使用的 HTTP 方法。 对于斯巴达克斯,需要配置以下方法:

GET HEAD OPTIONS PATCH PUT POST DELETE

allowedHeaders

allowed headers 设置指示允许跨域请求的 HTTP 标头。如果这些标头不允许跨域,Spartacus 将不会收到特定请求的响应。大多数标头是标准标头,但您可能需要一些特定于功能的标头。以下列表提供了可以使用的所有标头的概述。

allowCredentials

请求凭证(Request credentials)与 cookie、授权标头或 TLS 客户端证书有关。默认情况下,这些在跨域请求中是不允许的,这就是为什么在未应用配置时请求会被阻止的原因。

在 Spartacus 库的 1.x 版中,Spartacus 没有发送 cookie,但从 2.0 版开始,将为每个 OCC 请求发送 cookie。这也已修补到 Spartacus 库的 1.4 和 1.5 版。

需要发送 cookie 才能获得“会话亲和力”,也称为“粘性会话”。会话亲和性意味着 API 端点后面的同一服务器用于同一会话的所有后续请求。尽管 Commerce API 是无状态的,但有时多个并行或顺序调用可能会失败。例如,“添加到购物车”请求后跟“加载购物车”请求可能会失败,因为第一个请求可能会在服务器 1 上结束,而紧随其后的第二个请求可能会在服务器 2 上结束。服务器可能不够快,无法发送缓存失效,这就是为什么第二个响应可能无法捕获添加的项目。

会话亲缘关系的另一个优点是,如果对同一会话的请求由同一服务器提供服务,则后端将获得性能改进。

为此,CCv2 公开了一个响应 cookie (ROUTE),指示用于处理 API 请求的处理服务器。每当客户端将此 cookie 添加到下一个请求中时,该请求由同一服务器处理。

Setting Up CORS

后端需要的各种CORS配置可以通过以下方式安装:

  • 使用配置属性(configuration properties)在部署期间安装它们
  • 在部署期间使用 Commerce Cloud 清单文件(manifest.json)安装它们
  • 使用 ImpEx 脚本在运行时安装它们
  • 使用 Backoffice 在运行时手动配置它们

OCC 由名为 commercewebservices 的模板扩展(template extension)安装。 但是,您可以重命名扩展 Web 应用程序路径,或从中生成自定义扩展。 在下一节的示例中,我们假设名称为 commercewebservices,但如果您有自定义名称,则应替换它。

大多数配置仅适用于 OCC,但如果您使用其他 API(例如辅助服务模块),您还需要为这些 API 配置 CORS。

Project Properties File

如果按属性安装CORS过滤器配置,则必须添加以下属性:

corsfilter.commercewebservices.allowedOrigins=*
corsfilter.commercewebservices.allowedMethods=GET HEAD OPTIONS PATCH PUT POST DELETE
corsfilter.commercewebservices.allowedHeaders=origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time
corsfilter.commercewebservices.exposedHeaders=x-anonymous-consents occ-personalization-id occ-personalization-time
corsfilter.commercewebservices.allowCredentials=true

Commerce Cloud Manifest Configuration

如果您使用 Commerce Cloud 清单文件安装 CORS 过滤器配置,请将以下标头添加到清单文件:

{
    "key": "corsfilter.commercewebservices.allowedOrigins",
    "value": "*"
},
{
    "key": "corsfilter.commercewebservices.allowedMethods",
    "value": "GET HEAD OPTIONS PATCH PUT POST DELETE"
},
{
    "key": "corsfilter.commercewebservices.allowedHeaders",
    "value": "origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time"
},
{
    "key": "corsfilter.commercewebservices.exposedHeaders",
    "value": "x-anonymous-consents occ-personalization-id occ-personalization-time"
}
{
    "key": "corsfilter.commercewebservices.allowCredentials",
    "value": "true"
}

Impex

如果您想在初始化期间、更新期间或使用 Hybris 管理控制台手动安装 CORS 过滤器配置,您可以使用以下 ImpEx 脚本。

INSERT_UPDATE CorsConfigurationProperty;key[unique=true];value;context[default=commercewebservices,unique=true]
;allowedOrigins;*
;allowedMethods;GET HEAD OPTIONS PATCH PUT POST DELETE
;allowedHeaders;origin content-type accept authorization cache-control x-anonymous-consents x-profile-tag-debug x-consent-reference occ-personalization-id occ-personalization-time
;allowCredentials;true
;exposedHeaders;x-anonymous-consents occ-personalization-id occ-personalization-time

更多Jerry的原创文章,尽在:"汪子熙":


相关文章

网友评论

      本文标题:SAP Spartacus CORS 设置

      本文链接:https://www.haomeiwen.com/subject/yhnbbltx.html