春の雲アリババの研究ノート(18) - 春クラウドゲートウェイ内蔵のフィルター工場

参考ます。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

おすすめ

転載: www.cnblogs.com/fx-blog/p/11751977.html