如何搭配 Azure Spring 應用程式企業方案使用 VMware Spring Cloud 閘道路由篩選
注意
基本、標準和企業方案將從 2025 年 3 月中旬開始淘汰,並停用 3 年。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 Azure Spring Apps 淘汰公告。
標準 耗用量和專用 方案將從 2024 年 9 月 30 日起淘汰,並在六個月後完成關閉。 建議您轉換至 Azure Container Apps。 如需詳細資訊,請參閱 將 Azure Spring Apps 標準取用和專用方案遷移至 Azure Container Apps。
本文適用於: ❎基本/標準 ✅ 企業
此文章說明如何搭配 Azure Spring 應用程式企業方案使用 VMware Spring Cloud 閘道路由篩選,將要求路由傳送至您的應用程式。
VMware Spring Cloud Gateway 是以開放原始碼 Spring Cloud Gateway 專案為基礎的商業 VMware Tanzu 元件。 Spring Cloud Gateway 會處理 API 開發小組的跨領域考量,例如單一登入 (SSO)、存取控制、速率限制、復原、安全性等。 您可以使用新式雲端原生模式,以及您為 API 開發選擇的任何程式設計語言,加速 API 傳遞。
VMware Spring Cloud Gateway 包含下列功能:
- 動態路由設定,與可以套用和變更且不需要重新編譯的個別應用程式無關。
- 用於將授權的 JSON Web 權杖 (JWT) 宣告傳輸至應用程式服務的商業 API 路由篩選。
- 用戶端憑證授權。
- 速率限制方法。
- 斷路器設定。
- 支援透過 HTTP 基本驗證認證存取應用程式服務。
為了與適用於 VMware Tanzu 的 API 入口網站整合,VMware Spring Cloud 閘道會在新增或變更任何路由設定之後自動產生 OpenAPI 第 3 版文件。 如需詳細資訊,請參閱使用適用於 VMware Tanzu 的 API 入口網站。
必要條件
- 已經佈建的 Azure Spring 應用程式企業方案服務執行個體,且已啟用 Spring Cloud 閘道。 如需詳細資訊,請參閱快速入門:使用 Enterprise 方案建置應用程式並將其部署至 Azure Spring 應用程式。
- Azure CLI 2.0.67 版或更新版本。 使用下列命令安裝 Azure Spring 應用程式延伸模組:
az extension add --name spring
。
使用篩選器
您可以在 Spring Cloud 閘道設定中使用篩選,對路由設定的傳入要求或傳出回應採取行動。
例如,您可以使用篩選來新增 HTTP 標頭,或根據授權權杖拒絕存取。
使用開放原始碼篩選
Spring Cloud 閘道 OSS 包含數個可用來建立路由篩選的 GatewayFilter
處理站。 下列各節將描述這些處理站。
AddRequestHeader
AddRequestHeader
處理站會針對所有相符的要求,將標頭新增至下游要求的標頭。
此處理站接受下列設定參數:
name
value
下列範例會設定 AddRequestHeader
處理站,針對所有相符的要求,將標頭 X-Request-red:blue
新增至下游要求的標頭:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestHeader=X-Request-red, blue"
]
}
]
AddRequestHeader
處理站有權存取用來比對路徑或主機的 URI 變數。 您可以在值中使用 URI 變數,而變數會在執行階段擴展。
下列範例會設定使用變數的 AddRequestHeader
處理站:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddRequestHeader=X-Request-red, blue-{segment}"
]
}
]
AddRequestHeadersIfNotPresent
如果標頭不存在於原始要求中,AddRequestHeadersIfNotPresent
處理站就會新增標頭。
此處理站接受下列設定參數:
headers
:索引鍵/值組 (標頭名稱,標頭值) 的逗號分隔清單。
下列範例會設定 AddRequestHeadersIfNotPresent
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
AddRequestParameter
AddRequestParameter
處理站會針對所有相符的要求,將參數新增至下游要求的查詢字串。
此處理站接受下列設定參數:
name
value
下列範例會設定 AddRequestParameter
處理站,針對所有相符的要求,將 red=blue
參數新增至下游要求的查詢字串:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestParameter=red, blue"
]
}
]
AddRequestParameter
處理站有權存取用來比對路徑或主機的 URI 變數。 您可以在值中使用 URI 變數,而變數會在執行階段擴展。
下列範例會設定使用變數的 AddRequestParameter
處理站:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddRequestParameter=foo, bar-{segment}"
]
}
]
AddResponseHeader
AddResponseHeader
處理站會針對所有相符的要求,將標頭新增至下游回應的標頭。
此處理站接受下列設定參數:
name
value
下列範例會設定 AddResponseHeader
處理站,針對所有相符的要求,將 X-Response-Red:Blue
標頭新增至下游回應的標頭:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddResponseHeader=X-Response-Red, Blue"
]
}
]
AddResponseHeader
處理站有權存取用來比對路徑或主機的 URI 變數。 您可以在值中使用 URI 變數,而變數會在執行階段擴展。
下列範例會設定使用變數的 AddResponseHeader
處理站:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddResponseHeader=foo, bar-{segment}"
]
}
]
CircuitBreaker
CircuitBreaker
處理站會將路由包裝在斷路器中。
此處理站接受下列設定參數:
name
:斷路器名稱。fallbackUri
:重新路由URI,可以是本機路由或外部處理常式。status codes
(選用):要比對之狀態碼的冒號分隔清單 (採用數字或文格式)。failure rate
(選用):斷路器開啟的閾值。 預設值為 50%。duration
(選用):再次關閉之前等待的時間。 預設值為 60 秒。
下列範例會設定 CircuitBreaker
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
]
}
]
DeDupeResponseHeader
DeDupeResponseHeader
處理站會移除回應標頭的重複值。
此處理站接受下列設定參數:
name
:標頭名稱的空格分隔清單。strategy
(選用):接受的值為RETAIN_FIRST
、RETAIN_LAST
及RETAIN_UNIQUE
。 預設值是RETAIN_FIRST
。
下列範例會設定 DeDupeResponseHeader
處理站,以便在依閘道 CORS 邏輯和下游邏輯新增 Access-Control-Allow-Credentials
和 Access-Control-Allow-Origin
回應標頭的重複值時,移除這兩個值:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
]
}
]
FallbackHeaders
FallbackHeaders
處理站會將任何斷路器例外狀況新增至標頭。 此篩選需要在另一個路由中使用 CircuitBreaker
篩選。
此處理站沒有參數。
下列範例會使用 FallbackHeaders
篩選新增至要求的例外狀況類型、訊息,以及 (如果有的話) 根本原因例外狀況類型與訊息,來設定 FallbackHeaders
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
]
},
{
"predicates": [
"Path=/inCaseOfFailureUseThis"
],
"filters": [
"FallbackHeaders"
]
}
]
您可以藉由設定下列參數的值 (使用預設值提及) 來覆寫設定中的標頭名稱:
executionExceptionTypeHeaderName
("Execution-Exception-Type")executionExceptionMessageHeaderName
("Execution-Exception-Message")rootCauseExceptionTypeHeaderName
("Root-Cause-Exception-Type")rootCauseExceptionMessageHeaderName
("Root-Cause-Exception-Message")
JSONToGRPC
JSONToGRPCFilter
處理站會將 JSON 承載轉換為 gRPC 要求。
此處理站接受下列設定參數:
protoDescriptor
:proto 描述項檔案。
您可以使用 protoc
並指定 --descriptor_set_out
旗標來產生此檔案,如下列範例所示:
protoc --proto_path=src/main/resources/proto/ \
--descriptor_set_out=src/main/resources/proto/hello.pb \
src/main/resources/proto/hello.proto
注意
不支援 streaming
參數。
下列範例會使用 protoc
的輸出來設定 JSONToGRPCFilter
處理站:
[
{
"predicates": [
"Path=/json/**"
],
"filters": [
"JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
]
}
]
LocalResponseCache
LocalResponseCache
處理站會在啟動全域快取時,覆寫特定路由的本機回應快取設定。
此處理站接受下列設定參數:
size
:在快取收回開始之前,此路由允許的快取項目大小上限 (以 KB、MB 和 GB 為單位)。timeToLive
:到期之前快取項目允許的存留期。 針對秒使用持續期間後置詞s
、針對分鐘使用m
,或針對小時使用h
。
下列範例會設定 LocalResponseCache
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"LocalResponseCache=3m,1MB"
]
}
]
MapRequestHeader
MapRequestHeader
處理站會將標頭新增至下游要求,其中包含來自傳入 HTTP 要求標頭的更新值。
此處理站接受下列設定參數:
fromHeader
toHeader
此處理站會建立新的具名標頭 (toHeader
),並從傳入 HTTP 要求中擷取出現有具名標頭 (fromHeader
) 的值。 如果輸入標頭不存在,篩選就不會有任何作用。 如果新的具名標頭已經存在,其值就會隨著新值而擴增。
下列範例會設定 MapRequestHeader
處理站,以將 X-Request-Red:<values>
標頭新增至下游要求,其中包含來自傳入 HTTP 要求 Blue
標頭的更新值:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"MapRequestHeader=Blue, X-Request-Red"
]
}
]
PrefixPath
PrefixPath
處理站會將前置詞新增至所有要求的路徑。
此處理站接受下列設定參數:
prefix
下列範例會設定 PrefixPath
處理站,以將前置詞 /api
新增至所有要求的路徑,如此就能將對 /catalog
的要求傳送至 /api/catalog
:
[
{
"predicates": [
"Path=/catalog/**"
],
"filters": [
"PrefixPath=/api"
]
}
]
PreserveHostHeader
PreserveHostHeader
處理站會設定要求屬性,而路由篩選會檢查該屬性,以判斷是否要傳送原始主機標頭或由 HTTP 用戶端所決定的主機標頭。
此處理站沒有參數。
下列範例會設定 PreserveHostHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"PreserveHostHeader"
]
}
]
RedirectTo
RedirectTo
處理站會在原始 URL 中新增重新導向。
此處理站接受下列設定參數:
status
:300 系列重新導向 HTTP 代碼,例如301
。url
:Location
標頭的值。 必須是有效的 URI。 針對相對重新導向,您應該使用uri: no://op
作為路由定義的 URI。
下列範例會設定 RedirectTo
處理站,透過 Location:https://acme.org
標頭來傳送狀態 302
,以執行重新導向:
[
{
"uri": "https://example.org",
"filters": [
"RedirectTo=302, https://acme.org"
]
}
]
RemoveJsonAttributesResponseBody
RemoveJsonAttributesResponseBody
處理站會從 JSON 回應主體中移除 JSON 屬性及其值。
此處理站接受下列設定參數:
attribute names
:要從 JSON 回應中移除之屬性的名稱逗號分隔清單。delete recursively
(選用,布林值):僅移除根層級屬性的設定 (false
),或以遞迴方式移除 (true
)。 預設值是false
。
下列範例會設定 RemoveJsonAttributesResponseBody
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveJsonAttributesResponseBody=origin,foo,true"
]
}
]
RemoveRequestHeader
RemoveRequestHeader
處理站會從下游要求中移除標頭。
此處理站接受下列設定參數:
name
:要移除之標頭的名稱。
下列清單會設定 RemoveRequestHeader
處理站,在將 X-Request-Foo
標頭傳送至下游之前先行移除:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestHeader=X-Request-Foo"
]
}
]
RemoveRequestParameter
RemoveRequestParameter
處理站會在將參數傳送至下游之前先行移除。
此處理站接受下列設定參數:
name
:要移除之查詢參數的名稱。
下列範例會設定 RemoveRequestParameter
處理站,在將 red
參數傳送至下游之前先行移除:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestParameter=red"
]
}
]
RemoveResponseHeader
RemoveResponseHeader
處理站會先從回應中移除標頭,然後再將其傳回到閘道用戶端。
此處理站接受下列設定參數:
name
:要移除之標頭的名稱。
下列清單會設定 RemoveResponseHeader
處理站,先從回應中移除 X-Response-Foo
標頭,然後再將其傳回到閘道用戶端:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveResponseHeader=X-Response-Foo"
]
}
]
RequestHeaderSize
RequestHeaderSize
處理站會決定要求標頭的大小。
此處理站接受下列設定參數:
maxSize
:要求標頭允許的資料大小上限,包括索引鍵和值。errorHeaderName
:包含錯誤訊息的回應標頭名稱。 根據預設,回應標頭的名稱為errorMessage
。
下列清單會設定 RequestHeaderSize
處理站,如果有任何要求標頭的大小大於 1000 個位元組,就會傳送狀態 431
:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RequestHeaderSize=1000B"
]
}
]
RewriteLocationResponseHeader
RewriteLocationResponseHeader
處理站會修改 Location
回應標頭的值,通常是為了清除後端特有的詳細資料。
此處理站接受下列設定參數:
stripVersionMode
:此參數具有下列可能值:NEVER_STRIP
、AS_IN_REQUEST
及ALWAYS_STRIP
。 預設值是AS_IN_REQUEST
。NEVER_STRIP
:即使原始要求路徑未包含版本,也不會刪除版本。AS_IN_REQUEST
:只有當原始要求路徑未包含版本時,才會刪除版本。ALWAYS_STRIP
:即使原始要求路徑包含版本,也一律會刪除版本。
hostValue
:此參數會在提供時用來取代回應Location
標頭的host:port
部分。 如果未提供,即會使用Host
要求標頭的值。protocolsRegex
:有效的 RegExString
,其會與通訊協定名稱相符。 如果不相符,篩選便無法運作。 預設值是http|https|ftp|ftps
。locationHeaderName
下列清單會設定 RewriteLocationResponseHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
]
}
]
在此範例中,針對 POST
api.example.com/some/object/name
的要求值,將 object-service.prod.example.net/v2/some/object/id
的 Location
回應標頭值重寫為 api.example.com/some/object/id
。
RewritePath
RewritePath
處理站會使用 Java 規則運算式,彈性地重寫要求路徑。
此處理站接受下列設定參數:
regexp
replacement
下列清單會設定 RewritePath
處理站:
[
{
"predicates": [
"Path=/red/**"
],
"filters": [
"RewritePath=/red/?(?<segment>.*), /$\\{segment}"
]
}
]
在此範例中,針對 /red/blue
的要求路徑,此設定會在提出下游要求之前,將路徑設定為 /blue
。
RewriteResponseHeader
RewriteResponseHeader
處理站會使用 Java 規則運算式,彈性地重寫回應標頭值。
此處理站接受下列設定參數:
name
regexp
replacement
下列範例會設定 RewriteResponseHeader
處理站:
[
{
"predicates": [
"Path=/red/**"
],
"filters": [
"RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
]
}
]
在此範例中,針對 /42?user=ford&password=omg!what&flag=true
的標頭值,此設定會在提出下游要求之後,設定為 /42?user=ford&password=***&flag=true
。
SetPath
SetPath
處理站藉由允許路徑的樣板化區段,提供一種簡單的方式來操作要求路徑。 此篩選會使用 Spring Framework 中的 URI 範本,並允許多個相符的區段。
此處理站接受下列設定參數:
template
下列範例會設定 SetPath
處理站:
[
{
"predicates": [
"Path=/red/{segment}"
],
"filters": [
"SetPath=/{segment}"
]
}
]
在此範例中,針對 /red/blue
的要求路徑,此設定會在提出下游要求之前,將路徑設定為 /blue
。
SetRequestHeader
SetRequestHeader
處理站會以指定的名稱取代 (而不是新增) 所有標頭。
此處理站接受下列設定參數:
name
value
下列清單會設定 SetRequestHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"SetRequestHeader=X-Request-Red, Blue"
]
}
]
在此範例中,下游伺服器的回應為 X-Request-Red:1234
回應,且會將其取代為 X-Request-Red:Blue
。
SetRequestHeader
處理站有權存取用來比對路徑或主機的 URI 變數。 您可以在值中使用 URI 變數,而變數會在執行階段擴展。
下列範例會設定使用變數的 SetRequestHeader
處理站:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"SetRequestHeader=foo, bar-{segment}"
]
}
]
SetResponseHeader
SetResponseHeader
處理站會以指定的名稱取代 (而不是新增) 所有標頭。
此處理站接受下列設定參數:
name
value
下列清單會設定 SetResponseHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"SetResponseHeader=X-Response-Red, Blue"
]
}
]
在此範例中,下游伺服器的回應為 X-Response-Red:1234
回應,且會將其取代為 X-Response-Red:Blue
。
SetResponseHeader
處理站有權存取用來比對路徑或主機的 URI 變數。 您可以在值中使用 URI 變數,而變數會在執行階段擴展。
下列範例會設定使用變數的 SetResponseHeader
處理站:
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"SetResponseHeader=foo, bar-{segment}"
]
}
]
SetStatus
SetStatus
處理站會設定伺服器要求的回應狀態。
此處理站接受下列設定參數:
status
:有效的 SpringHttpStatus
值,其可以是整數值 (例如404
),也可以是列舉的字串表示法 (例如NOT_FOUND
)。
下列清單會設定 SetStatus
處理站:
[
{
"predicates": [
"Path=/experimental/**"
],
"filters": [
"SetStatus=UNAUTHORIZED"
]
},
{
"predicates": [
"Path=/unknown/**"
],
"filters": [
"SetStatus=401"
]
}
]
StripPrefix
StripPrefix
處理站會先從要求中移除前置詞,然後再將其傳送至下游。
此處理站接受下列設定參數:
parts
:在將要求傳送至下游之前,要從要求移除之路徑中的組件數目。 預設值是 1秒。
下列範例會設定 StripPrefix
處理站:
[
{
"predicates": [
"Path=/name/**"
],
"filters": [
"StripPrefix=2"
]
}
]
在此範例中,會透過閘道向 /name/blue/red
提出要求。 向 nameservice
提出的要求會顯示為 nameservice/red
。
重試
Retry
處理站會決定嘗試的重試次數。
此處理站接受下列設定參數:
retries
:應嘗試的重試次數。statuses
:應重試的 HTTP 狀態碼,使用org.springframework.http.HttpStatus
來表示。methods
:應重試的 HTTP 方法,使用org.springframework.http.HttpMethod
來表示。series
:應重試的狀態碼系列,使用org.springframework.http.HttpStatus.Series
來表示。exceptions
:應重試的擲回例外狀況清單。backoff
:針對重試設定的指數輪詢。 重試會在firstBackoff * (factor ^ n)
的輪詢間隔之後執行,其中n
是反覆項目。 如果設定了maxBackoff
,則套用的最大輪詢會限制為maxBackoff
。 如果basedOnPreviousValue
為 True,即會使用prevBackoff * factor
來計算backoff
。
啟用時,會針對 Retry
篩選設定下列預設值:
retries
:三次。series
:5XX 系列。methods
:GET 方法。exceptions
:IOException
和TimeoutException
。backoff
:停用。
下列範例會設定 Retry
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
]
}
]
RequestSize
當要求大小大於允許的限制時,RequestSize
處理站可以限制要求到達下游服務。
此處理站接受下列設定參數:
maxSize
:DataSize
類型,其中的值會定義為數字,後面接著選用的DataUnit
後置詞,例如KB
或MB
。 針對位元組預設的後置詞值為B
。 其是以位元組為單位所定義之要求允許的大小限制。
下列範例會設定 RequestSize
處理站:
[
{
"predicates": [
"Path=/upload"
],
"filters": [
"RequestSize=5000000"
]
}
]
在此範例中,當要求因為大小而遭到拒絕時,RequestSize
處理站會透過另一個標頭 errorMessage
,將回應狀態設定為 413 Payload Too Large
。
下列範例會顯示 errorMessage
:
errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB
TokenRelay
TokenRelay
處理站會將 OAuth2
存取權杖轉送至下游資源。 此篩選會設定為路由定義中的 boolean
值,而不是明確篩選。
下列範例會設定 TokenRelay
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"tokenRelay": true
}
]
使用商業篩選
適用於 Kubernetes 的 Spring Cloud 閘道也會提供許多自訂 GatewayFilter
處理站。 下列各節將描述這些處理站。
AllowedRequestCookieCount
AllowedRequestCookieCount
處理站會根據 Cookie 數目來判斷是否允許相符的要求繼續。
此處理站接受下列設定參數:
amount
:允許的 Cookie 數目。
下列範例會設定 AllowedRequestCookieCount
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestCookieCount=2"
]
}
]
AllowedRequestHeadersCount
AllowedRequestHeadersCount
處理站會根據標頭數目來判斷是否允許相符的要求繼續。
此處理站接受下列設定參數:
amount
:允許的標頭數目。
下列範例會設定 AllowedRequestHeadersCount
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestHeadersCount=4"
]
}
]
AllowedRequestQueryParamsCount
AllowedRequestQueryParamsCount
處理站會根據查詢參數數目來判斷是否允許相符的要求繼續。
此處理站接受下列設定參數:
amount
:允許的參數數目。
下列範例會設定 AllowedRequestQueryParamsCount
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestQueryParamsCount=3"
]
}
]
BasicAuth
BasicAuth
處理站會將 BasicAuth
Authorization
標頭新增至要求。
此處理站沒有參數。
下列範例會設定 BasicAuth
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"BasicAuth"
]
}
]
ClaimHeader
ClaimHeader
處理站會將 JWT 宣告中的資料複製到 HTTP 標頭中。
此處理站接受下列設定參數:
Claim name
:要傳遞之宣告區分大小寫的名稱。Header name
:HTTP 標頭的名稱。
下列範例會設定 ClaimHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"ClaimHeader=sub,X-Claim-Sub"
]
}
]
ClientCertificateHeader
ClientCertificateHeader
處理站會驗證 X-Forwarded-Client-Cert
標頭憑證。
此處理站接受下列設定參數:
domain pattern
:根據 Kubernetes 辨識用戶端憑證 CA 的能力而定的X-Forwarded-Client-Cert
值。certificate fingerprint
(選用):TLS/SSL 憑證指紋。
下列範例會設定 ClientCertificateHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
]
}
]
Cors
Cors
處理站會在路由上啟用 CORS 驗證。
此處理站接受下列設定參數,這些參數會組織為適用於 CORS 選項的索引鍵/值組:
allowedOrigins
allowedMethods
allowedHeaders
maxAge
allowCredentials
allowedOriginPatterns
下列範例會設定 Cors
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
]
}
]
JsonToXml
JsonToXml
處理站會將 JSON 回應主體轉換成 XML 回應主體。
此處理站接受下列設定參數:
wrapper
:如果需要另一個根標籤,才能產生有效的 XML,則為 XML 回應的根標籤名稱。 預設值是response
。
下列範例會設定 JsonToXml
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"JsonToXml=custom-response"
]
}
]
RateLimit
RateLimit
處理站會根據要求量來判斷是否允許相符的要求繼續。
此處理站接受下列設定參數:
request limit
:視窗期間接受的要求數目上限。window duration
:視窗持續期間 (以毫秒為單位)。 或者,您可以使用s
、m
或h
後置詞來指定持續期間 (以秒、分鐘或小時為單位)。partition source
(選用):分割區索引鍵的位置 (claim
、header
或IPs
)。partition key
(選用):用於分割區要求計數器的值。
下列範例會設定 RateLimit
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RateLimit=1,10s"
]
}
]
下列範例會顯示其他 RateLimit
設定:
RateLimit=1,10s
RateLimit=1,10s,{claim:client_id}
RateLimit=1,10s,{header:client_id}
RateLimit=2,10s,{IPs:2;127.0.0.1;192.168.0.1}
RestrictRequestHeaders
RestrictRequestHeaders
處理站會根據標頭來判斷是否允許相符的要求繼續。
如果有任何 HTTP 標頭未在不區分大小寫的 headerList
設定中,則會將 431 Forbidden error
的回應傳回到用戶端。
此處理站接受下列設定參數:
headerList
:允許標頭不區分大小寫的名稱清單。
下列範例會設定 RestrictRequestHeaders
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RestrictRequestHeaders=Content-Type,x-request-temp"
]
}
]
RewriteAllResponseHeaders
RewriteAllResponseHeaders
處理站會一次重寫多個回應標頭。
此處理站接受下列設定參數:
pattern to match
:要與標頭值相符的規則運算式。replacement
:替代值。
下列範例會設定 RewriteAllResponseHeaders
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteAllResponseHeaders=\\d,0"
]
}
]
RewriteResponseBody
RewriteResponseBody
處理站會修改回應的主體。
此處理站接受下列設定參數,這些參數會組織為索引鍵/值組的逗號分隔清單,其中每一組都接受 pattern to match:replacement
格式:
pattern to match
:要與回應主體中的文字相符的規則運算式。replacement
:替代值。
下列範例會設定 RewriteResponseBody
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteResponseBody=foo:bar,/path-one/:/path-two/"
]
}
]
RewriteJsonAttributesResponseBody
RewriteJsonAttributesResponseBody
處理站會使用 JSONPath
標記法來重寫 JSON 屬性。
此處理站接受下列設定參數,這些參數會組織為索引鍵/值組的逗號分隔清單,其中每一組都接受 jsonpath:replacement
格式:
jsonpath
:要與回應主體相符的JSONPath
運算式。replacement
:替代值。
下列範例會設定 RewriteJsonAttributesResponseBody
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
]
}
]
角色
Roles
處理站會授權包含其中一個已設定角色的要求。
此處理站接受下列設定參數:
roles
:已授權角色的逗號分隔清單。
下列範例會設定 Roles
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Roles=role_01,role_02"
]
}
]
範圍
Scopes
處理站會授權包含其中一個已設定 OAuth
範圍的要求。
此處理站接受下列設定參數:
scopes
:已授權OAuth
範圍的逗號分隔清單。
下列範例會設定 Scopes
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Scopes=api.read,api.write,user"
]
}
]
StoreIpAddress
StoreIPAddress
處理站僅用於應用程式內容中的延伸模組開發。
此處理站接受下列設定參數:
attribute name
:用來將 IP 儲存為交換屬性的名稱。
下列範例會設定 StoreIPAddress
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"StoreIpAddress=ip"
]
}
]
SSO 登入
如果沒有任何有效的授權權杖,SSO login
處理站就會重新導向至驗證。 此處理站會設定為路由定義中的 boolean
值,而不是明確篩選。
下列範例會設定 SSO login
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"ssoEnabled": true
}
]
StoreHeader
StoreHeader
處理站會將標頭值儲存在應用程式的內容中。 此篩選僅適用於延伸模組開發。
此處理站接受下列設定參數:
headers
:要檢查的標頭清單。 系統會使用第一個找到的項目。attribute name
:用來將標頭值儲存為交換屬性的名稱。
下列範例會設定 StoreHeader
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
]
}
]
XmlToJson
XmlToJson
處理站會將 XML 回應主體轉換成 JSON 回應主體。
此處理站沒有參數。
下列範例會設定 XmlToJson
處理站:
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"XmlToJson"
]
}
]