SAP Spartacus CORS 设置
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=trueCommerce 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 设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mht文件无法打开的解决办法
- 下一篇: 详解BLE空口包格式—兼BLE Link