参考ます。https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.1.0.RELEASE/single/spring-cloud-gateway.html#_gatewayfilter_factories
addRequestHeader GatewayFilter工場
ヘッダは、元の要求への構成例を追加しました:元の要求の値に名前X-リクエスト・フー、バー要求ヘッダーを追加します
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddRequestHeader=X-Request-Foo, Bar
AddRequestParameter GatewayFilter工場
元の要求及びパラメータの値を追加する要求、構成例:FOOという名前の元の要求に追加し、バーのパラメータ値、すなわち:FOO =バール
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri: https://example.org
filters:
- AddRequestParameter=foo, bar
AddResponseHeader GatewayFilter工場
バーの元の値に応じて、X-要求-fooという追加応答ヘッダ:ヘッダは、元の応答、構成例に加え
spring:
cloud:
gateway:
routes:
- id: add_response_header_route
uri: https://example.org
filters:
- AddResponseHeader=X-Response-Foo, Bar
DedupeResponseHeader GatewayFilter工場
ゲートウェイおよびマイクロサービスの会社CORS(クロスドメインが解決)ヘッダを、設定されており、任意の構成、要求実行しない場合 - >ゲートウェイ - >マイクロサービス、CORSヘッダーが得られた値を、それはこのようになります。
Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
ヘッダーは、あなたがこれらの2つの値ヘッダーの重複排除をしたい場合は、その後、あなたはDedupeResponseHeaderに使用する必要があり、これら2つの値が繰り返された構成例を見ることができます:
spring:
cloud:
gateway:
routes:
- id: dedupe_response_header_route
uri: https://example.org
filters:
# 若需要去重的Header有多个,使用空格分隔
- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
重複除外戦略:
- RETAIN_FIRST:デフォルトは、最初の値を保持します
- RETAIN_LAST:最後の値を保持
- RETAIN_UNIQUE:彼らは最初に予約登場ために、すべての一意の値を保ちます
PS:春クラウドグリニッジSR2は、このバージョンの下に提供される新機能は使用できません。
Hystrix GatewayFilter工場
Hystrixルーティング回路ブレーカ保護は、構成例を紹介しています。
spring:
cloud:
gateway:
routes:
- id: hystrix_route
uri: https://example.org
filters:
- Hystrix=myCommandName
PS: Hystrix春クラウドはフォールトトレラント構成部品の第一世代ですが、メンテナンスモードに入った、将来Hystrix春クラウドはアリババセンチネル/ Resilience4Jによって置き換えられ、オフに削除されます。
FallbackHeaders GatewayFilter工場
Hystrix前のセクションで説明したのと同じ支持体は、フィルタ工場設定パラメータサポート:fallbackUriを異常特定URIに転送要求を発生した場合に、この設定が使用されます。要求がURI、ヘッダに異常情報の特定の値に転送されるときと、この濾過プラントFallbackHeadersヘッダを追加することができます。設定例:
spring:
cloud:
gateway:
routes:
- id: ingredients
uri: lb://ingredients
predicates:
- Path=//ingredients/**
filters:
- name: Hystrix
args:
name: fetchIngredients
fallbackUri: forward:/fallback
- id: ingredients-fallback
uri: http://localhost:9994
predicates:
- Path=/fallback
filters:
- name: FallbackHeaders
args:
executionExceptionTypeHeaderName: Test-Header
PrefixPath GatewayFilter工場
要求パスの元のパスに接頭辞を追加し、構成は:この構成では、アクセス$ {GATEWAY_URL} /ハローhttps://example.org/mypath/helloに転送できます
spring:
cloud:
gateway:
routes:
- id: prefixpath_route
uri: https://example.org
filters:
- PrefixPath=/mypath
PreserveHostHeader GatewayFilter工場
リクエストがpreserveHostHeader = trueを属性の追加、フィルタ、属性、元のホストヘッダーを送信するかどうかを判断するための経路をチェックします。設定例:
spring:
cloud:
gateway:
routes:
- id: preserve_host_route
uri: https://example.org
filters:
- PreserveHostHeader
設定されていない場合は、HTTPクライアント制御によるヘッダは、ホストと呼ばれています
RequestRateLimiter GatewayFilter工場
リクエストを制限するため、トークンバケットアルゴリズムを制限します。設定例:
spring:
cloud:
gateway:
routes:
- id: requestratelimiter_route
uri: https://example.org
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
RedirectTo GatewayFilter工場
指定されたURLにリダイレクト元の要求、構成例:
spring:
cloud:
gateway:
routes:
- id: redirect_route
uri: https://example.org
filters:
- RedirectTo=302, https://acme.org
この構成では、アクセス$は{GATEWAY_URL} /ハローがhttps://acme.org/helloにリダイレクトされる可能、と場所運ぶ:HTTP://acme.orgヘッダ、クライアントは、HTTPステータスコードを返す302
PS :
- HTTPステータスコードべき3XX、301例
- URLは場所ヘッダーの値のようになります。有効なURLでなければなりません
RemoveHopByHopHeadersFilter GatewayFilter工場
IETFを削除する元の要求は、ヘッダーのシリーズを定義し、次のようにヘッダーのデフォルトは削除されました:
- 接続
- 生き続ける
- プロキシ認証
- プロキシ認証
- TO
- トレーラー
- 転送エンコーディング
- アップグレードは、
ヘッダのみ、設定例を削除するかを指定するように構成することができます。
spring:
cloud:
gateway:
filter:
remove-hop-by-hop:
# 多个Header使用逗号(,)分隔
headers: Connection,Keep-Alive
RemoveRequestHeader GatewayFilter工場
ヘッダーの元の要求の除去、構成例:X-要求-Fooの元の要求は、指定された要求ヘッダーを削除します
spring:
cloud:
gateway:
routes:
- id: removerequestheader_route
uri: https://example.org
filters:
- RemoveRequestHeader=X-Request-Foo
RemoveResponseHeader GatewayFilter工場
ヘッダー、構成例に元の応答を削除します。最初のX-要求-fooは削除元の応答に応じての名前は
spring:
cloud:
gateway:
routes:
- id: removeresponseheader_route
uri: https://example.org
filters:
- RemoveResponseHeader=X-Response-Foo
RewritePath GatewayFilter工場
要求の元のパスを書き換えることにより、正規表現、構成例:
spring:
cloud:
gateway:
routes:
- id: rewritepath_route
uri: https://example.org
predicates:
- Path=/foo/**
filters:
# 参数1为原始路径的正则表达式,参数2为重写后路径的正则表达式
- RewritePath=/foo/(?<segment>.*), /$\{segment}
そのような/バーアクセス/ fooのように構成した場合に、経路、すなわちhttps://example.org/barに転送し、転送/バーに書き換えられます。注意:YAML構文は$ $を交換するために必要なので
RewriteResponseHeader GatewayFilter工場
ヘッダ、構成例に応じて原稿を上書きします。
spring:
cloud:
gateway:
routes:
- id: rewriteresponseheader_route
uri: https://example.org
filters:
# 参数1为Header名称,参数2为值的正则表达式,参数3为重写后的值
- RewriteResponseHeader=X-Response-Foo, password=[^&]+, password=***
この構成の重要性は=レスポンスヘッダX-応答-Fooの値/ 42ユーザー=フォード&パスワード場合:?ことである OMG何&フラグ=真、 それは/ 42の構成の値に応じて書き換えることであろうが、ユーザー=フォード&パスワードである=! &フラグに=真、つまり、どのへパスワード= OMG!リライトパスワードになったものを=
SaveSession GatewayFilter工場
要求を転送する前に、執行WebSession ::操作を保存し、設定例:
spring:
cloud:
gateway:
routes:
- id: save_session
uri: https://example.org
predicates:
- Path=/foo/**
filters:
- SaveSession
主に春のセッション(データはすぐに永続化しない)と、要求を転送する前に状況保存することをセッション状態を確認したい格納されたデータを遅らせるの種類等に使用されます。あなたは春のセッション春Secutiryでの使用を統合し、下流のマシンに送信される情報のセキュリティを確保するために必要される場合は、フィルタを設定する必要があります。
secureHeaders GatewayFilter工場
あなたの安全のためsecureHeadersフィルタ工場は、元の応答にレスポンスヘッダのシリーズを追加しました。(値を含む)ヘッダを以下のようにデフォルトが追加されます。
- X-XSS-保護:1; モード=ブロック
- 厳格な-トランスポートセキュリティ:最大エージング= 631138519
- X-フレーム・オプション:DENY
- X-Content-Typeの-オプション:nosniff
- リファラー・ポリシー:ノーリファラー
- コンテンツセキュリティポリシー:デフォルト-srcの '自己' のhttps :; フォント-srcの '自己' のhttps:データ:; IMG-srcの '自己' のhttps:データ:; オブジェクト-SRC 'なし'; スクリプト-SRC HTTPS :; スタイル-srcの '自己' のhttps: '危険なインライン'
- X-ダウンロード-オプション:NOOPEN
- X-許可-クロスドメインポリシー:なし
あなたはこれらのヘッダーの値を変更したい場合は、次のように、接尾辞に対応するこれらのヘッダを使用する必要があります。
- XSS保護-ヘッダ
- 厳格な輸送セキュリティ
- フレームオプション
- コンテンツ・タイプのオプション
- リファラポリシー
- コンテンツセキュリティポリシー
- ダウンロード-オプション
- 許可クロスドメインポリシー
設定例:
spring:
cloud:
gateway:
filter:
secure-headers:
# 修改 X-Xss-Protection 的值为 2; mode=unblock
xss-protection-header: 2; mode=unblock
あなたがヘッダーの一部を無効にしたい場合は、次の構成を使用します。
spring:
cloud:
gateway:
filter:
secure-headers:
# 多个使用逗号(,)分隔
disable: frame-options,download-options
SETPATH GatewayFilter工場
元の要求の経路を変更し、設定例:
spring:
cloud:
gateway:
routes:
- id: setpath_route
uri: https://example.org
predicates:
- Path=/foo/{segment}
filters:
- SetPath=/{segment}
この構成は、/バー修正するアクセス$ {GATEWAY_URL} / FOO /バーは、すなわち元/ FOO /バーhttps://example.org/barに転送を可能にします
SetResponseHeader GatewayFilter工場
元の応答、構成例の変形例のヘッダ値:X-応答-フーバーの修正に応じて元の値
spring:
cloud:
gateway:
routes:
- id: setresponseheader_route
uri: https://example.org
filters:
- SetResponseHeader=X-Response-Foo, Bar
setStatus GatewayFilter工場
元の応答ステータスコード、構成例を変更します。
spring:
cloud:
gateway:
routes:
- id: setstatusstring_route
uri: https://example.org
filters:
# 字符串形式
- SetStatus=BAD_REQUEST
- id: setstatusint_route
uri: https://example.org
filters:
# 数字形式
- SetStatus=401
SetStatusd値は、数、または文字列を指定できます。しかし、それは価値はhttpStatus春の列挙クラスでなければなりません。上記構成の両方がHTTP 401のステータスコードを返すことができます。
StripPrefix GatewayFilter工場
元の要求、構成例のパスを切断します。
spring:
cloud:
gateway:
routes:
- id: nameRoot
uri: http://nameservice
predicates:
- Path=/name/**
filters:
# 数字表示要截断的路径的数量
- StripPrefix=2
パス要求が/名前/バー/ fooのであれば、それはfooの後に/転送に切り捨てられます、つまり、2つのパスがカットされます。
GatewayFilter工場を再試行
異なる再試行応答のために、例えば、HTTPステータスコード、構成例の再試行:
spring:
cloud:
gateway:
routes:
- id: retry_test
uri: http://localhost:8080/flakey
predicates:
- Host=*.retry.com
filters:
- name: Retry
args:
retries: 3
statuses: BAD_GATEWAY
次のようにパラメータを構成することができます。
- 再試行:再試行回数
- ステータス:ステータスコードは、再試行されるようにorg.springframework.http.HttpStatusに値を必要とします
- 方法:メソッド要求を再試行する必要があり、org.springframework.http.HttpMethodの値
- シリーズ:HTTPステータスコードシーケンス、org.springframework.http.HttpStatus.Seriesの値
RequestSize GatewayFilter工場
要求パケットのサイズ、構成例を設定する許可された最大の受信:要求されたパケットのサイズは、413ペイロードが大きすぎた設定値を超えるとにErrorMessageを返します場合
spring:
cloud:
gateway:
routes:
- id: request_size_route
uri: http://localhost:8080/upload
predicates:
- Path=/upload
filters:
- name: RequestSize
args:
# 单位为字节
maxSize: 5000000
リクエストボディGatewayFilterファクトリーを変更
リクエストボディを転送する前に、元のコンテンツの要求を変更のみフィルタプラントコード構成によって、構成は、構成ファイルでサポートされていません。コード例:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("rewrite_request_obj", r -> r.host("*.rewriterequestobj.org")
.filters(f -> f.prefixPath("/httpbin")
.modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE,
(exchange, s) -> return Mono.just(new Hello(s.toUpperCase())))).uri(uri))
.build();
}
static class Hello {
String message;
public Hello() { }
public Hello(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
フィルタ工場はBETA状態にある、APIは注意して、将来的には生産環境を変更することがあり
レスポンスボディGatewayFilterファクトリーを変更
応答は、元のボディの内容を変更するために使用することができる、フィルタコードは、構成ファイルでサポートされていないだけ同じ植物、によって構成されています。コード例:
@Bean
public RouteLocator routes(RouteLocatorBuilder builder) {
return builder.routes()
.route("rewrite_response_upper", r -> r.host("*.rewriteresponseupper.org")
.filters(f -> f.prefixPath("/httpbin")
.modifyResponseBody(String.class, String.class,
(exchange, s) -> Mono.just(s.toUpperCase()))).uri(uri)
.build();
}
フィルタ工場はBETA状態にある、APIは注意して、将来的には生産環境を変更することがあり
デフォルトのフィルタ
フィルタファクトリを通じてデフォルト・フィルタを設定されているすべてのルートフィルタ工場を、追加するために使用されるデフォルトのフィルタは、すべての経路に作用します。設定例:
spring:
cloud:
gateway:
default-filters:
- AddResponseHeader=X-Response-Default-Foo, Default-Bar
- PrefixPath=/httpbin