この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 9128|答える: 0

[出典] Spring Cloud Gatewayに組み込まれたフィルター工場

[リンクをコピー]
掲載地 2022/02/07 13:36:49 | | |
内蔵フィルター工場

こちらはSpring Cloud Gatewayに組み込まれているすべてのフィルター工場の簡単な表で、詳細はあまり詳しくありませんが、簡単な概要として利用できます。 次のように:

フィルター工場
機能
パラメーター
AddRequestHeader
元のリクエストにヘッダーを追加する
ヘッダー名と値
AddRequestParameter
元のリクエストにリクエストパラメータを追加します
パラメータ名と値
AddResponseHeader
元の回答にヘッダーを追加してください
ヘッダー名と値
DedupeResponseヘッダー
レスポンスヘッダー内の重複値は却下します
重複除去が必要なヘッダー名と重複除去戦略
ヒストリックス
Hystrixの回路ブレーカー保護をルートに導入してください
HystrixCommandの名称
フォールバックヘッダー
フォールバックUriのリクエストヘッダーに特定の例外情報を追加します
ヘッダーの名前
プレフィックスパス
元のリクエストパスにプレフィックスを追加します
プレフィックスパス
PreserveHostヘッダー
リクエストにpreserveHostHeader=trueプロパティを追加し、ルーティングフィルターがそれをチェックして元のホストを送るかどうか判断します
じゃない
RequestRateLimiter
リクエストをスロットルするために使われるスロットリングアルゴリズムはトークンバケットです
keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
リダイレクト
元のリクエストを指定されたURLにリダイレクトします
HTTPステータスコードとリダイレクトURL
RemoveHopByHopHeadersFilter
元の要求に対してIETF組織が定めた一連のヘッダーを削除してください
これはデフォルトで有効で、設定で削除すべきヘッダーを指定できます
RemoveRequestHeader
元のリクエストのヘッダーを削除してください
ヘッダー名
RemoveResponseHeader
元の回答のヘッダーを削除してください
ヘッダー名
リライトパス
元のリクエストパスを書き換えました
元のパス正規表現と書き換えられた経路の正規表現
RewriteResponseHeader
元の応答のヘッダーを書き換えてください
ヘッダー名、値の正則表現、書き換えた値
セーブセッション
リクエストを転送する前にWebSession::save操作を強制してください
じゃない
secureHeaders
元の回答に対してセキュリティとして機能する一連のレスポンスヘッダーを追加します
いずれもありません。これらのセキュリティレスポンスヘッダーの値は変更できます
SetPath
元のリクエストパスを修正してください
修正経路
SetResponseHeader
元の応答のヘッダーの値を修正してください
ヘッダー名、修正された値
SetStatus
元の応答のステータスコードを修正してください
HTTPステータスコードは、数字や文字列で表れます
StripPrefix(ストリッププリフィックス)
元のリクエストの経路を切り詰めるために使われます
切り詰めるべき経路の数を示すために数字を用いてください
リトライ
別の回答を試すために再挑戦してください
リトリー、ステータス、メソッド、シリーズ
リクエストサイズ
受信可能な最大要求パケットのサイズを設定します。 リクエストパッケージサイズが設定値を超えると、413 Payload Too Largeが返されます
リクエストパッケージのサイズはバイト単位で、デフォルト値は5Mです
ModifyRequestBody
リクエストを転送する前に、元のリクエスト本文の内容を変更してください
修正された要求本体の内容
ModifyResponseBody
元の応答本文の内容を修正してください
修正反応体の内容
デフォルト
すべてのルートにフィルターを追加してください
フィルター工場名と値

ヒント:各フィルター工場は実装クラスに対応しており、クラス名は必ずGatewayFilterFactoryで終わらせなければなりませんこれはSpring Cloud Gatewayの慣例であり、例えばAddRequestHeaderに対応する実装クラスはAddRequestHeaderGatewayFilterFactoryです。 ソースコードに興味のある友人は、このルールに従って特定のクラス名をスプリキスすることで、これらの組み込みフィルターファクトリーの実装コードを見つけることができます。

1、AddRequestHeader GatewayFilter Factory

元のリクエストにヘッダーを追加し、設定例:


元のリクエストにBarの値を持つX-Request-Fooというリクエストヘッダーを追加します

2、AddRequestParameter GatewayFilter Factory

元のリクエストにリクエストパラメータと値を追加し、構成例:


元のリクエストにbarの値を持つfooというパラメータを追加します。すなわち、foo=barです。

3、AddResponseHeader GatewayFilter Factory

元の回答にヘッダーを追加し、設定例:


元のレスポンスにBarの値を持つX-Request-Fooというレスポンスヘッダーを追加します

4、DedupeResponseHeader GatewayFilter Factory

DedupeResponseHeaderは、設定されたヘッダー名と重複除去ポリシーに基づいてレスポンスヘッダー内の重複値を除去できます。これはSpring Cloud Greenwich SR2が提供する新機能で、このバージョンでは使用できません。

私たちもしCORS(Solving Cross-Domain)ヘッダーがゲートウェイとマイクロサービスの両方に設定されていて、設定が行われていない場合、->ゲートウェイ->マイクロサービスを要求することで得られるCORSヘッダーの値は、次のようになります:


Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
これら2つのヘッダーの値が重複しているのがわかります。重複を減らしたい場合はDedupeResponseHeaderを使う必要があります。設定例:

重複除去戦略:

  • RETAIN_FIRST:デフォルト、最初の値を保持してください
  • RETAIN_LAST:最後の値は保持してください
  • RETAIN_UNIQUE: すべてのユニークな値は最初に現れた順に保持してください


フィルターファクトリーをより深く理解したいなら、ソースコードを読むことをお勧めします。ソースコードには詳細な注釈や例があり、公式ドキュメントよりも優れています:org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory

5、Hystrix GatewayFilter Factory

Hystrixのルート用サーキットブレーカー保護をご紹介します。構成例:


HystrixはSpring Cloudの初世代の耐障害コンポーネントですが、現在はメンテナンスモードに入っており、将来的にSpring CloudによってHystrixは廃止され、代わりにAlibaba Sentinel/Resilience4Jが導入される予定です。 そのためこの記事では詳しくは触れません。興味があれば公式ドキュメントをご参照ください:Hystrix GatewayFilter Factory

6、FallbackHeaders GatewayFilter Factory

Hystrixもサポートしており、前節で説明したフィルターファクトリーは、例外が発生した場合に特定のURIへのリクエストを転送するために使われる構成パラメータ「fallbackUri」をサポートしています。 FallbackHeadersのフィルターファクトリーは、リクエストをURIに転送する際にヘッダーを追加でき、そのヘッダーの値が特定の例外情報となります。 構成例:


ここでは詳しくは触れませんが、興味があれば公式ドキュメントを参照してください:FallbackHeaders GatewayFilter Factory

7、PrefixPath GatewayFilter Factory

元のリクエストパスにプレフィックスパスを追加し、設定例:


この構成により、${GATEWAY_URL}/helloへの訪問は に転送されますhttps://example.org/mypath/hello

8、PreserveHostHeader GatewayFilter Factory

リクエストにpreserveHostHeader=trueプロパティを追加し、ルーティングフィルターがこれをチェックして元のHostヘッダーを送信するかどうかを判断します。 構成例:


設定されていない場合、Hostという名前のヘッダーはHttpクライアントによって制御されます

9、RequestRateLimiter GatewayFilter Factory

これはリクエストのスロットルに使われ、スロットリングアルゴリズムはトークンバケットです。 構成例:


10、RedirectTo GatewayFilter Factory

元のリクエストを指定されたURLにリダイレクトします。設定例:


この構成により、${GATEWAY_URL}/helloへのアクセスがリダイレクトされます https://acme.org/hello 、1を運ぶLocation:http://acme.orgクライアントを返すHTTPステータスコードは302です

筆記:

HTTPステータスコードは3xx、例えば301であるべきです

URLはLocation Headerの値として機能する正当なURLでなければなりません

11、RemoveHopByHopHeadersFilter GatewayFilter Factory

IETF組織が指定した一連のヘッダーを削除するための元の要求の場合、デフォルトの削除ヘッダーは以下の通りです。


  • 接続
  • キープ・アライブ
  • プロキシ認証
  • プロキシ認可
  • TE
  • トレーラー
  • 転送符号化
  • アップグレード


どのヘッダーが削除されるかは設定で指定できます。設定例:


12、RemoveRequestHeader GatewayFilter Factory

元のリクエストのヘッダーを削除するには、例を設定してください:


元のリクエストからX-Request-Fooというリクエストヘッダーを削除してください

13、RemoveResponseHeader GatewayFilter Factory

元の応答のヘッダーを削除するには、例を設定してください:


元の応答からX-Request-Fooというレスポンスヘッダーを削除してください

14、RewritePath GatewayFilter Factory

元のリクエストパスを正規表現で上書きした場合、構成例:


この構成により、/foo/barへのアクセスにより、/barへの経路を書き換えて転送、すなわち次の転送が可能になります https://example.org/bar。 YAML構文のため、$\の代わりに$\を使う必要があることに注意してください

15、RewriteResponseHeader GatewayFilter Factory

元の回答のヘッダーを書き直す、設定例:


この構成の重要性は、応答ヘッダーのX-Response-Fooの値が/42?user=ford&password=omg!what&flag=trueである場合、設定された値に従って/42?user=ford&password=***&flag=trueに書き換えられ、すなわちpassword=omg!whatがpassword=***に書き換えられるということです

16、SaveSession GatewayFilter Factory

リクエストを転送する前に、WebSession::save 操作を強制してください。設定例:


主にSpring Sessionのようなディフェアデータ保存(データが即座に永続化されない)に使われ、リクエストが転送される前にセッション状態が保存されることを確実にしたいと考えています。 Spring SecutiryをSpring Sessionに統合し、すべてのセキュリティ情報を下流マシンに確実に送信したい場合は、このフィルターを設定する必要があります。

17、secureHeaders GatewayFilter Factory

secureHeadersフィルターファクトリーは主にこのブログの推奨に基づいており、元の応答でセキュリティ役割を果たす一連のレスポンスヘッダーを追加しています。 デフォルトでは、以下のヘッダー(値を含む)が追加されます:


  • X-Xss-Protection:1; mode=block
  • Strict-Transport-Security:max-age=631138519
  • X-Frame-Options:DENY
  • X-Content-Type-Options:nosniff
  • Referrer-Policy:no-referrer
  • Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
  • X-Download-Options:noopen
  • X-Permitted-Cross-Domain-Policies:none


これらのヘッダーの値を変更したい場合は、以下の対応するヘッダーの接尾辞を使用する必要があります:

  • xss-protection-header
  • 厳格輸送セキュリティ
  • フレームオプション
  • コンテンツタイプオプション
  • リファラーポリシー
  • コンテンツセキュリティポリシー
  • ダウンロードオプション
  • 許可ドメインクロスポリシー


構成例:


特定のヘッダーを無効にしたい場合は、以下の設定を使用できます:

18、SetPath GatewayFilter Factory

元のリクエストパスを修正し、例を設定します:


この構成により、アクセス時に${GATEWAY_URL}/foo/barに転送されますhttps://example.org/bar つまり、元の /foo/bar は /bar に変更されました

19、SetResponseHeader GatewayFilter Factory

元の応答のヘッダーの値を修正し、例を構成します:


元のBarへの応答でX-Response-Fooの値を修正します

20、SetStatus GatewayFilter Factory

元の応答のステータスコードを修正し、構成例を挙げます:


SetStatusdの値は数値または文字列のいずれかで表されます。 しかし、それはSpringのHttpStatus列挙クラスの数値でなければなりません。 上記のどちらの設定もHTTPステータスコード401を返すことができます。

21、StripPrefix GatewayFilter Factory

元のリクエストの経路を切り落とすための構成例:


上記の構成で示されているように、要求されたパスが /name/bar/foo の場合、/foo に切り詰められ転送されます。つまり、2つのパスが切り詰められます。

22、Retry GatewayFilter Factory

異なる応答のために再試行してください。例えばHTTPステータスコードや設定例:


以下のパラメータを設定できます:

  • リトライ:再挑戦回数
  • statuses:再試行が必要なステータスコードで、org.springframework.http.HttpStatusで設定されます
  • methods:再試す必要があるリクエストメソッドで、org.springframework.http.HttpMethod に値があります。
  • series:HTTP ステータスコードシーケンス、org.springframework.http.Http.HttpStatus.Series に値を持つ


23、RequestSize GatewayFilter Factory

受信可能な最大リクエストパケットのサイズを設定します。設定例:


リクエストパッケージサイズが設定値を超えると、413 Payload Too Largeとエラーメッセージが返されます

24、Modify Request Body GatewayFilter Factory

リクエストを転送する前に元のリクエストボディの内容を変更してください。フィルターファクトリーはコードによってのみ設定でき、設定ファイル内ではできません。 コード例:


ヒント:このフィルター工場はベータ段階にあり、APIは将来的に変更される可能性があります。本番環境の使用には注意してください

25、Modify Response Body GatewayFilter Factory

フィルターファクトリーは元のレスポンスボディの内容を変更することもでき、フィルターファクトリーは設定ファイル内ではなくコードでのみ設定可能です。 コード例:


ヒント:このフィルター工場はベータ段階にあり、APIは将来的に変更される可能性があるため、本番環境での使用には注意してください

26、デフォルトフィルター

Default Filtersはすべてのルートにフィルター工場を追加するために使われ、つまりパスを通過しますデフォルトフィルターで工場出荷時設定されたフィルターはすべてのルートに適用されます。 構成例:


(終わり)




先の:Dockerのログはディスクやデータ移行を埋め尽くします
次に:Javaの動的スプライシングされたSQL文はデータベース注入を防止します
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com