Teilen über


Verwenden von VMware Spring Cloud Gateway-Routenfiltern mit dem Azure Spring Apps Enterprise-Plan

Hinweis

Azure Spring Apps ist der neue Name für den Azure Spring Cloud-Dienst. Obwohl der Dienst umbenannt wurde, wird der alte Name noch an einigen Stellen verwendet, solange wir Ressourcen wie Screenshots, Videos und Diagramme aktualisieren.

Dieser Artikel gilt für:❌ Basic/Standard ✔️ Enterprise

In diesem Artikel wird erläutert, wie Sie VMware Spring Cloud Gateway-Routenfilter mit dem Azure Spring Apps Enterprise-Plan verwenden, um Anforderungen an Ihre Anwendungen weiterzuleiten.

VMware Spring Cloud Gateway ist eine kommerzielle VMware Tanzu-Komponente, die auf dem Spring Cloud Gateway-Open-Source-Projekt basiert. Spring Cloud Gateway erleichtert die Berücksichtigung übergreifender Aspekte durch API-Entwicklungsteams, z. B. einmaliges Anmelden (SSO), Zugriffssteuerung, Ratenbegrenzung, Resilienz, Sicherheit usw. Sie können die API-Bereitstellung mit modernen cloudnativen Modellen und einer beliebigen Programmiersprache für die API-Entwicklung beschleunigen.

VMware Spring Cloud Gateway umfasst die folgenden Funktionen:

  • Dynamische Routingkonfiguration, unabhängig von einzelnen Anwendungen, die ohne Neukompilierung angewendet und geändert werden können.
  • Commercial API route filters for transporting authorized JSON Web Token (JWT) claim to application services.
  • Clientzertifikatautorisierung.
  • Ratenbegrenzungsansätze.
  • Konfiguration von Trennschaltern (Circuit Breakers)
  • Unterstützung für den Zugriff auf Anwendungsdienste über HTTP-Standardauthentifizierungsanmeldeinformationen.

Um das API-Portal für VMware Tanzu zu integrieren, generiert VMware Spring Cloud Gateway automatisch openAPI Version 3-Dokumentation nach allen Routenkonfigurationszufügungen oder -änderungen. Weitere Informationen finden Sie unter Verwenden des API-Portals für VMware Tanzu.

Voraussetzungen

Filter verwenden

Sie verwenden Filter in Ihrer Spring Cloud Gateway-Konfiguration, um auf die eingehende Anforderung oder ausgehende Antwort auf eine Routenkonfiguration zu reagieren.

Sie können z. B. einen Filter verwenden, um einen HTTP-Header hinzuzufügen oder den Zugriff basierend auf einem Autorisierungstoken zu verweigern.

Verwenden von Open Source-Filtern

Spring Cloud Gateway OSS enthält mehrere GatewayFilter Fabriken, die zum Erstellen von Filtern für Routen verwendet werden. In den folgenden Abschnitten werden diese Fabriken beschrieben.

AddRequestHeader

Die AddRequestHeader Factory fügt einen Header zu den Headern der downstream-Anforderung für alle übereinstimmenden Anforderungen hinzu.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name
  • value

Im folgenden Beispiel wird eine Factory konfiguriert, die den Header zu den Headern der downstream-Anforderung für alle übereinstimmenden Anforderungen hinzufügt:The following example configures an AddRequestHeader factory that adds the header X-Request-red:blue to the downstream request's header for all matching requests:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue"
        ]
    }
]

Die AddRequestHeader Factory hat Zugriff auf die URI-Variablen, die zum Abgleichen eines Pfads oder Hosts verwendet werden. Sie können URI-Variablen im Wert verwenden, und die Variablen werden zur Laufzeit erweitert.

Im folgenden Beispiel wird eine AddRequestHeader Factory konfiguriert, die eine Variable verwendet:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue-{segment}"
        ]
    }
]

AddRequestHeadersIfNotPresent

Die AddRequestHeadersIfNotPresent Factory fügt Kopfzeilen hinzu, wenn sie in der ursprünglichen Anforderung nicht vorhanden sind.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • headers: Eine durch Trennzeichen getrennte Liste von Schlüssel-Wert-Paaren (Headername, Headerwert).

Im folgenden Beispiel wird eine AddRequestHeadersIfNotPresent Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
        ]
    }
]

AddRequestParameter

Die AddRequestParameter Factory fügt einen Parameter zur Abfragezeichenfolge der downstream-Anforderung für alle übereinstimmenden Anforderungen hinzu.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name
  • value

Im folgenden Beispiel wird eine AddRequestParameter Factory konfiguriert, die der Abfragezeichenfolge der nachgeschalteten Anforderung einen red=blue Parameter für alle übereinstimmenden Anforderungen hinzufügt:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestParameter=red, blue"
        ]
    }
]

Die AddRequestParameter Factory hat Zugriff auf die URI-Variablen, die zum Abgleichen eines Pfads oder Hosts verwendet werden. Sie können URI-Variablen im Wert verwenden, und die Variablen werden zur Laufzeit erweitert.

Im folgenden Beispiel wird eine AddRequestParameter Factory konfiguriert, die eine Variable verwendet:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestParameter=foo, bar-{segment}"
        ]
    }
]

AddResponseHeader

Die AddResponseHeader Factory fügt einen Header zu den Headern der nachgeschalteten Antwort für alle übereinstimmenden Anforderungen hinzu.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name
  • value

Im folgenden Beispiel wird eine AddResponseHeader Factory konfiguriert, die den Headern der nachgeschalteten Antwort für alle übereinstimmenden Anforderungen einen X-Response-Red:Blue Header hinzufügt:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddResponseHeader=X-Response-Red, Blue"
        ]
    }
]

Die AddResponseHeader Factory hat Zugriff auf die URI-Variablen, die zum Abgleichen eines Pfads oder Hosts verwendet werden. Sie können URI-Variablen im Wert verwenden, und die Variablen werden zur Laufzeit erweitert.

Im folgenden Beispiel wird eine AddResponseHeader Factory konfiguriert, die eine Variable verwendet:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddResponseHeader=foo, bar-{segment}"
        ]
    }
]

CircuitBreaker

Die CircuitBreaker Fabrik umschließt Routen in einem Schaltkreisschalter.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name: Der Name des Schaltkreisschalters.
  • fallbackUri: Der Umleitungs-URI, der eine lokale Route oder ein externer Handler sein kann.
  • status codes (optional): Die durch Doppelpunkt getrennte Liste der Statuscodes, die übereinstimmen sollen, im Zahlen- oder Textformat.
  • failure rate (optional): Der Schwellenwert, über dem der Schaltkreisschalter geöffnet wird. Der Standardwert ist 50 %.
  • duration (optional): Die Wartezeit, bevor sie erneut geschlossen wird. Der Standardwert beträgt 60 Sekunden.

Im folgenden Beispiel wird eine CircuitBreaker Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    }
]

DeDupeResponseHeader

Die DeDupeResponseHeader Factory entfernt doppelte Werte von Antwortheadern.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name: Eine durch Leerzeichen getrennte Liste von Kopfzeilennamen.
  • strategy (optional): Die akzeptierten Werte sind RETAIN_FIRST, RETAIN_LASTund RETAIN_UNIQUE. Der Standardwert ist RETAIN_FIRST.

Im folgenden Beispiel wird eine DeDupeResponseHeader Factory konfiguriert, die doppelte Werte von Access-Control-Allow-Credentials und Access-Control-Allow-Origin Antwortheader entfernt, wenn beide Werte von der CORS-Logik des Gateways und der downstream-Logik hinzugefügt werden:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
        ]
    }
]

FallbackHeaders

Die FallbackHeaders Factory fügt einer Kopfzeile eine Ausnahme für den Schaltkreistrennschalter hinzu. Für diesen Filter ist die Verwendung des CircuitBreaker Filters in einer anderen Route erforderlich.

Für diese Factory gibt es keine Parameter.

Im folgenden Beispiel wird eine FallbackHeaders Factory mit dem Ausnahmetyp, der Nachricht und (sofern verfügbar) der Ursache für den Ausnahmetyp und die Meldung konfiguriert, die der FallbackHeaders Filter der Anforderung hinzufügt:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    },
    {
        "predicates": [
            "Path=/inCaseOfFailureUseThis"
        ],
        "filters": [
            "FallbackHeaders"
        ]
    }
]

Sie können die Namen der Header in der Konfiguration überschreiben, indem Sie die Werte der folgenden Parameter festlegen (Erwähnung mit ihren Standardwerten):

  • executionExceptionTypeHeaderName ("Execution-Exception-Type")
  • executionExceptionMessageHeaderName ("Execution-Exception-Message")
  • rootCauseExceptionTypeHeaderName ("Root-Cause-Exception-Type")
  • rootCauseExceptionMessageHeaderName ("Root-Cause-Exception-Message")

JSONToGRPC

Die JSONToGRPCFilter Factory konvertiert eine JSON-Nutzlast in eine gRPC-Anforderung.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • protoDescriptor: Eine Protobeschreibungsdatei.

Sie können diese Datei mithilfe protoc und Angeben des --descriptor_set_out Flags generieren, wie im folgenden Beispiel gezeigt:

protoc --proto_path=src/main/resources/proto/ \
    --descriptor_set_out=src/main/resources/proto/hello.pb \
    src/main/resources/proto/hello.proto

Hinweis

Der streaming Parameter wird nicht unterstützt.

Im folgenden Beispiel wird eine JSONToGRPCFilter Factory mithilfe der Ausgabe von protoc:

[
    {
        "predicates": [
            "Path=/json/**"
        ],
        "filters": [
            "JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
        ]
    }
]

LocalResponseCache

Die LocalResponseCache Factory setzt die konfiguration des lokalen Antwortcaches für bestimmte Routen außer Kraft, wenn der globale Cache aktiviert wird.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • size: Die maximal zulässige Größe der Cacheeinträge für diese Route, bevor die Cacheräumung beginnt (in KB, MB und GB).
  • timeToLive: Die zulässige Lebensdauer eines Cacheeintrags vor ablaufen. Verwenden Sie das Suffix s "Dauer" für Sekunden, m minutenlang oder h stundenlang.

Im folgenden Beispiel wird eine LocalResponseCache Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "LocalResponseCache=3m,1MB"
        ]
    }
]

MapRequestHeader

Die MapRequestHeader Factory fügt der downstream-Anforderung einen Header mit aktualisierten Werten aus dem Header der eingehenden HTTP-Anforderung hinzu.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • fromHeader
  • toHeader

Diese Factory erstellt einen neuen benannten Header (toHeader), und der Wert wird aus einem vorhandenen benannten Header (fromHeader) aus der eingehenden HTTP-Anforderung extrahiert. Wenn der Eingabeheader nicht vorhanden ist, hat der Filter keine Auswirkung. Wenn der neue benannte Header bereits vorhanden ist, werden die Werte mit den neuen Werten erweitert.

Im folgenden Beispiel wird eine MapRequestHeader Factory konfiguriert, die den X-Request-Red:<values> Header der downstream-Anforderung mit aktualisierten Werten aus dem Header der eingehenden HTTP-Anforderung Blue hinzufügt:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "MapRequestHeader=Blue, X-Request-Red"
        ]
    }
]

PrefixPath

Die PrefixPath Factory fügt dem Pfad aller Anforderungen ein Präfix hinzu.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • prefix

Im folgenden Beispiel wird eine PrefixPath Factory konfiguriert, die das Präfix /api zum Pfad aller Anforderungen hinzufügt, sodass eine Anforderung /catalog an /api/catalog:

[
    {
        "predicates": [
            "Path=/catalog/**"
        ],
        "filters": [
            "PrefixPath=/api"
        ]
    }
]

PreserveHostHeader

Die PreserveHostHeader Factory legt ein Anforderungsattribut fest, das der Routingfilter prüft, um festzustellen, ob der ursprüngliche Hostheader oder der vom HTTP-Client festgelegte Hostheader gesendet werden soll.

Für diese Factory gibt es keine Parameter.

Im folgenden Beispiel wird eine PreserveHostHeader Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "PreserveHostHeader"
        ]
    }
]

RedirectTo

Die RedirectTo Factory fügt eine Umleitung zur ursprünglichen URL hinzu.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • status: Ein 300-Reihenumleitungs-HTTP-Code, z 301. B. .
  • url: Der Wert der Location Kopfzeile. Muss ein gültiger URI sein. Für relative Umleitungen sollten Sie als URI Ihrer Routendefinition verwenden uri: no://op .

Im folgenden Beispiel wird eine RedirectTo Factory konfiguriert, die einen Status 302 mit einem Location:https://acme.org Header sendet, um eine Umleitung auszuführen:

[
    {
        "uri": "https://example.org",
        "filters": [
            "RedirectTo=302, https://acme.org"
        ]
    }
]

RemoveJsonAttributesResponseBody

Die RemoveJsonAttributesResponseBody Factory entfernt die JSON-Attribute und deren Werte aus JSON-Antworttexten.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • attribute names: Eine durch Trennzeichen getrennte Liste der Namen von Attributen, die aus einer JSON-Antwort entfernt werden sollen.
  • delete recursively (optional, boolescher Wert): Eine Konfiguration, die die Attribute nur auf Stammebene () oderfalse rekursiv (true) entfernt. Der Standardwert ist false.

Im folgenden Beispiel wird eine RemoveJsonAttributesResponseBody Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveJsonAttributesResponseBody=origin,foo,true"
        ]
    }
]

RemoveRequestHeader

Die RemoveRequestHeader Factory entfernt einen Header aus der downstream-Anforderung.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • name: Der Name der zu entfernenden Kopfzeile.

In der folgenden Auflistung wird eine RemoveRequestHeader Factory konfiguriert, die den X-Request-Foo Header entfernt, bevor er nachgelagert gesendet wird:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestHeader=X-Request-Foo"
        ]
    }
]

RemoveRequestParameter

Die RemoveRequestParameter Factory entfernt einen Parameter, bevor er nach unten gesendet wird.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • name: Der Name des zu entfernenden Abfrageparameters.

Im folgenden Beispiel wird eine RemoveRequestParameter Factory konfiguriert, die den red Parameter entfernt, bevor er nachgelagert gesendet wird:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestParameter=red"
        ]
    }
]

RemoveResponseHeader

Die RemoveResponseHeader Factory entfernt einen Header aus der Antwort, bevor sie an den Gatewayclient zurückgegeben wird.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • name: Der Name der zu entfernenden Kopfzeile.

Die folgende Auflistung konfiguriert eine RemoveResponseHeader Factory, die den X-Response-Foo Header aus der Antwort entfernt, bevor sie an den Gatewayclient zurückgegeben wird:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveResponseHeader=X-Response-Foo"
        ]
    }
]

RequestHeaderSize

Die RequestHeaderSize Factory bestimmt die Größe des Anforderungsheaders.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • maxSize: Die vom Anforderungsheader zulässige maximale Datengröße, einschließlich Schlüssel und Wert.
  • errorHeaderName: Der Name des Antwortheaders, der eine Fehlermeldung enthält. Standardmäßig lautet errorMessageder Name des Antwortheaders .

Die folgende Auflistung konfiguriert eine RequestHeaderSize Factory, die einen Status 431 sendet, wenn die Größe eines Anforderungsheaders größer als 1000 Byte ist:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RequestHeaderSize=1000B"
        ]
    }
]

RewriteLocationResponseHeader

Die RewriteLocationResponseHeader Factory ändert den Wert des Location Antwortheaders, normalerweise um back-end-spezifische Details zu entfernen.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • stripVersionMode: Dieser Parameter hat die folgenden möglichen Werte: NEVER_STRIP, , AS_IN_REQUESTund ALWAYS_STRIP. Der Standardwert ist AS_IN_REQUEST.

    • NEVER_STRIP: Die Version wird nicht entfernt, auch wenn der ursprüngliche Anforderungspfad keine Version enthält.
    • AS_IN_REQUEST: Die Version wird nur entfernt, wenn der ursprüngliche Anforderungspfad keine Version enthält.
    • ALWAYS_STRIP: Die Version wird immer entfernt, auch wenn der ursprüngliche Anforderungspfad Version enthält.
  • hostValue: Dieser Parameter wird verwendet, um den host:port Teil des Antwortheaders Location zu ersetzen, wenn angegeben. Wenn er nicht angegeben wird, wird der Wert des Host Anforderungsheaders verwendet.

  • protocolsRegex: Ein gültiger regex String, mit dem der Protokollname abgeglichen wird. Wenn sie nicht übereinstimmen, funktioniert der Filter nicht. Der Standardwert ist http|https|ftp|ftps.

  • locationHeaderName

Die folgende Auflistung konfiguriert eine RewriteLocationResponseHeader Factory:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
        ]
    }
]

In diesem Beispiel wird für einen Anforderungswert des POSTapi.example.com/some/object/nameAntwortheaders der Locationobject-service.prod.example.net/v2/some/object/id Wert neu geschrieben als api.example.com/some/object/id.

Rewritepath

Die RewritePath Factory verwendet reguläre Java-Ausdrücke für eine flexible Methode zum Umschreiben des Anforderungspfads.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • regexp
  • replacement

Die folgende Auflistung konfiguriert eine RewritePath Factory:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewritePath=/red/?(?<segment>.*), /$\\{segment}"
        ]
    }
]

In diesem Beispiel legt diese Konfiguration für einen Anforderungspfad /red/blueden Pfad vor /blue dem Erstellen der downstream-Anforderung fest.

RewriteResponseHeader

Die RewriteResponseHeader Factory verwendet reguläre Java-Ausdrücke für eine flexible Möglichkeit, den Antwortheaderwert umzuschreiben.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name
  • regexp
  • replacement

Im folgenden Beispiel wird eine RewriteResponseHeader Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
        ]
    }
]

In diesem Beispiel wird die Konfiguration für einen Headerwert /42?user=ford&password=omg!what&flag=truefestgelegt /42?user=ford&password=***&flag=true , nachdem die downstream-Anforderung vorgenommen wurde.

SetPath

Die SetPath Factory bietet eine einfache Möglichkeit, den Anforderungspfad zu bearbeiten, indem vorlagenbasierte Segmente des Pfads zugelassen werden. Dieser Filter verwendet die URI-Vorlagen aus Spring Framework und ermöglicht mehrere übereinstimmende Segmente.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • template

Im folgenden Beispiel wird eine SetPath Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/red/{segment}"
        ],
        "filters": [
            "SetPath=/{segment}"
        ]
    }
]

In diesem Beispiel legt diese Konfiguration für einen Anforderungspfad /red/blueden Pfad vor /blue dem Erstellen der downstream-Anforderung fest.

SetRequestHeader

Die SetRequestHeader Factory ersetzt (anstatt alle Kopfzeilen durch den angegebenen Namen hinzuzufügen).

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name
  • value

Die folgende Auflistung konfiguriert eine SetRequestHeader Factory:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetRequestHeader=X-Request-Red, Blue"
        ]
    }
]

In diesem Beispiel hat der nachgeschaltete Server mit X-Request-Red:1234, und er wird durch X-Request-Red:Blueersetzt .

Die SetRequestHeader Factory hat Zugriff auf die URI-Variablen, die zum Abgleichen eines Pfads oder Hosts verwendet werden. Sie können URI-Variablen im Wert verwenden, und die Variablen werden zur Laufzeit erweitert.

Im folgenden Beispiel wird eine SetRequestHeader Factory konfiguriert, die eine Variable verwendet:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetRequestHeader=foo, bar-{segment}"
        ]
    }
]

SetResponseHeader

Die SetResponseHeader Factory ersetzt (anstatt alle Kopfzeilen durch den angegebenen Namen hinzuzufügen).

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • name
  • value

Die folgende Auflistung konfiguriert eine SetResponseHeader Factory:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetResponseHeader=X-Response-Red, Blue"
        ]
    }
]

In diesem Beispiel hat der nachgeschaltete Server mit X-Response-Red:1234, und er wird durch X-Response-Red:Blueersetzt .

Die SetResponseHeader Factory hat Zugriff auf die URI-Variablen, die zum Abgleichen eines Pfads oder Hosts verwendet werden. Sie können URI-Variablen im Wert verwenden, und die Variablen werden zur Laufzeit erweitert.

Im folgenden Beispiel wird eine SetResponseHeader Factory konfiguriert, die eine Variable verwendet:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetResponseHeader=foo, bar-{segment}"
        ]
    }
]

SetStatus

Die SetStatus Factory konfiguriert den Antwortstatus der Serveranforderung.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • status: Ein gültiger Springwert HttpStatus , der einen ganzzahligen Wert wie 404z. B. die Zeichenfolgendarstellung der Aufzählung wie z NOT_FOUND. B. .

Die folgende Auflistung konfiguriert eine SetStatus Factory:

[
    {
        "predicates": [
            "Path=/experimental/**"
        ],
        "filters": [
            "SetStatus=UNAUTHORIZED"
        ]
    },
    {
        "predicates": [
            "Path=/unknown/**"
        ],
        "filters": [
            "SetStatus=401"
        ]
    }
]

StripPrefix

Die StripPrefix Factory entfernt das Präfix aus der Anforderung, bevor sie nachgelagert gesendet wird.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • parts: Die Anzahl der Teile im Pfad, die von der Anforderung entfernt werden sollen, bevor sie nachgelagert gesendet wird. Der Standardwert ist 1.

Im folgenden Beispiel wird eine StripPrefix Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/name/**"
        ],
        "filters": [
            "StripPrefix=2"
        ]
    }
]

In diesem Beispiel wird eine Anforderung über das Gateway zu /name/blue/red. Die angeforderte nameservice Anforderung wird angezeigt als nameservice/red.

Wiederholen

Die Retry Factory bestimmt die Anzahl der versuchten Wiederholungen.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • retries: Die Anzahl der Wiederholungen, die versucht werden sollen.
  • statuses: Die HTTP-Statuscodes, die wiederholt werden sollen, dargestellt durch die Verwendung org.springframework.http.HttpStatus.
  • methods: Die HTTP-Methoden, die wiederholt werden sollen, dargestellt mithilfe von org.springframework.http.HttpMethod.
  • series: Die Reihe von Statuscodes, die wiederholt werden sollen, dargestellt durch die Verwendung org.springframework.http.HttpStatus.Series.
  • exceptions: Die Liste der ausgelösten Ausnahmen, die wiederholt werden sollen.
  • backoff: Der konfigurierte exponentielle Backoff für die Wiederholungen. Wiederholungen werden nach einem Backoffintervall von firstBackoff * (factor ^ n), wobei n die Iteration erfolgt. Wenn maxBackoff dies konfiguriert ist, ist der maximal angewendete Backoff auf maxBackoff. Wenn basedOnPreviousValue wahr, wird die backoff Berechnung mithilfe prevBackoff * factorvon .

Die folgenden Standardwerte sind für den Retry Filter konfiguriert, wenn diese aktiviert sind:

  • retries:Dreimal.
  • series: 5XX Serie.
  • methods: GET-Methode.
  • exceptions: IOException und TimeoutException.
  • backoff:Deaktiviert.

Im folgenden Beispiel wird eine Retry Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
        ]
    }
]

RequestSize

Die RequestSize Fabrik kann einschränken, dass eine Anforderung den nachgelagerten Dienst erreicht, wenn die Anforderungsgröße größer als der zulässige Grenzwert ist.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • maxSize: Ein DataSize Typ, bei dem Werte als Zahl definiert werden, gefolgt von einem optionalen DataUnit Suffix wie KB oder MB. Der Standardsuffixwert ist B für Bytes. Dies ist die zulässige Größenbeschränkung der anforderung, die in Bytes definiert ist.

Im folgenden Beispiel wird eine RequestSize Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/upload"
        ],
        "filters": [
            "RequestSize=5000000"
        ]
    }
]

Wenn die Anforderung in diesem Beispiel aufgrund der Größe abgelehnt wird, legt die RequestSize Factory den Antwortstatus 413 Payload Too Large mit einem anderen Header errorMessagefest.

Das folgende Beispiel zeigt folgendes:errorMessage

errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB

TokenRelay

Die TokenRelay Factory leitet ein OAuth2 Zugriffstoken an downstream-Ressourcen weiter. Dieser Filter wird als Wert in der Routendefinition und nicht als boolean expliziter Filter konfiguriert.

Im folgenden Beispiel wird eine TokenRelay Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "tokenRelay": true
    }
]

Verwenden kommerzieller Filter

Spring Cloud Gateway für Kubernetes bietet auch viele benutzerdefinierte GatewayFilter Fabriken. In den folgenden Abschnitten werden diese Fabriken beschrieben.

AllowedRequestCookieCount

Die AllowedRequestCookieCount Factory bestimmt, ob eine übereinstimmende Anforderung basierend auf der Anzahl der Cookies fortgesetzt werden darf.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • amount: Die Anzahl der zulässigen Cookies.

Im folgenden Beispiel wird eine AllowedRequestCookieCount Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestCookieCount=2"
        ]
    }
]

AllowedRequestHeadersCount

Die AllowedRequestHeadersCount Factory bestimmt, ob eine übereinstimmende Anforderung basierend auf der Anzahl der Header fortgesetzt werden darf.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • amount: Die Anzahl der zulässigen Kopfzeilen.

Im folgenden Beispiel wird eine AllowedRequestHeadersCount Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestHeadersCount=4"
        ]
    }
]

AllowedRequestQueryParamsCount

Die AllowedRequestQueryParamsCount Factory bestimmt, ob eine übereinstimmende Anforderung basierend auf den Zahlenabfrageparametern fortgesetzt werden darf.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • amount: Die Anzahl der zulässigen Parameter.

Im folgenden Beispiel wird eine AllowedRequestQueryParamsCount Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestQueryParamsCount=3"
        ]
    }
]

BasicAuth

Die BasicAuth Factory fügt eine BasicAuthAuthorization Kopfzeile zu Anforderungen hinzu.

Für diese Factory gibt es keine Parameter.

Im folgenden Beispiel wird eine BasicAuth Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "BasicAuth"
        ]
    }
]

ClaimHeader

Die ClaimHeader Factory kopiert Daten aus einem JWT-Anspruch in einen HTTP-Header.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • Claim name: Der Name der Groß-/Kleinschreibung des zu übergebenden Anspruchs.
  • Header name: Der Name des HTTP-Headers.

Im folgenden Beispiel wird eine ClaimHeader Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClaimHeader=sub,X-Claim-Sub"
        ]
    }
]

ClientCertificateHeader

Die ClientCertificateHeader Factory überprüft das X-Forwarded-Client-Cert Headerzertifikat.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • domain pattern: Der X-Forwarded-Client-Cert Wert gemäß der Fähigkeit von Kubernetes, die Zertifizierungsstelle des Clientzertifikats zu erkennen.
  • certificate fingerprint(optional): Der Fingerabdruck des TLS/SSL-Zertifikats.

Im folgenden Beispiel wird eine ClientCertificateHeader Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
        ]
    }
]

Cors

Die Cors Factory aktiviert die CORS-Validierungen auf einer Route.

Diese Factory akzeptiert die folgenden Konfigurationsparameter, die als Schlüsselwertpaare für CORS-Optionen organisiert sind:

  • allowedOrigins
  • allowedMethods
  • allowedHeaders
  • maxAge
  • allowCredentials
  • allowedOriginPatterns

Im folgenden Beispiel wird eine Cors Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
        ]
    }
]

JsonToXml

Die JsonToXml Factory transformiert JSON-Antworttext in XML-Antworttext.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • wrapper: Der Stammtagname für die XML-Antwort, wenn ein anderes Stammtag zum Generieren gültiger XML-Daten erforderlich ist. Der Standardwert ist response.

Im folgenden Beispiel wird eine JsonToXml Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "JsonToXml=custom-response"
        ]
    }
]

RateLimit

Die RateLimit Factory bestimmt, ob eine übereinstimmende Anforderung basierend auf dem Anforderungsvolumen fortgesetzt werden darf.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • request limit: Die maximale Anzahl von Anforderungen, die während des Fensters akzeptiert werden.
  • window duration: Die Fensterdauer in Millisekunden. Alternativ können Sie mit den sm Suffixen die h Dauer in Sekunden, Minuten oder Stunden angeben.
  • partition source (optional): Der Speicherort des Partitionsschlüssels (claim, headeroder IPs).
  • partition key (optional): Der Wert, der zum Partitionieren von Anforderungsindikatoren verwendet wird.

Im folgenden Beispiel wird eine RateLimit Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RateLimit=1,10s"
        ]
    }
]

Die folgenden Beispiele zeigen andere RateLimit Konfigurationen:

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

Die RestrictRequestHeaders Factory bestimmt, ob eine übereinstimmende Anforderung basierend auf den Headern fortgesetzt werden darf.

Wenn http-Header vorhanden sind, die sich nicht in der Konfiguration ohne Groß-/Kleinschreibung headerList befinden, wird eine Antwort an 431 Forbidden error den Client zurückgegeben.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • headerList: Die Liste der Namen zulässiger Kopfzeilen wird durch Groß-/Kleinschreibung nicht beachtet.

Im folgenden Beispiel wird eine RestrictRequestHeaders Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RestrictRequestHeaders=Content-Type,x-request-temp"
        ]
    }
]

RewriteAllResponseHeaders

Die RewriteAllResponseHeaders Factory schreibt mehrere Antwortheader gleichzeitig um.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • pattern to match: Der reguläre Ausdruck, der mit Headerwerten abgeglichen werden soll.
  • replacement: Der Ersetzungswert.

Im folgenden Beispiel wird eine RewriteAllResponseHeaders Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteAllResponseHeaders=\\d,0"
        ]
    }
]

RewriteResponseBody

Die RewriteResponseBody Factory ändert den Textkörper einer Antwort.

Diese Factory akzeptiert die folgenden Konfigurationsparameter, die als durch Trennzeichen getrennte Liste von Schlüssel-Wert-Paaren organisiert sind, wobei jedes Paar das Formular pattern to match:replacementakzeptiert:

  • pattern to match: Der reguläre Ausdruck, der mit Text im Antworttext abgeglichen werden soll.
  • replacement: Der Ersetzungswert.

Im folgenden Beispiel wird eine RewriteResponseBody Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteResponseBody=foo:bar,/path-one/:/path-two/"
        ]
    }
]

RewriteJsonAttributesResponseBody

Die RewriteJsonAttributesResponseBody Factory schreibt JSON-Attribute mithilfe der Schreibweise neu JSONPath .

Diese Factory akzeptiert die folgenden Konfigurationsparameter, die als durch Trennzeichen getrennte Liste von Schlüssel-Wert-Paaren organisiert sind, wobei jedes Paar das Formular jsonpath:replacementakzeptiert:

  • jsonpath: Der JSONPath Ausdruck, der mit dem Antworttext abgeglichen werden soll.
  • replacement: Der Ersetzungswert.

Im folgenden Beispiel wird eine RewriteJsonAttributesResponseBody Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
        ]
    }
]

Rollen

Die Roles Factory autorisiert Anforderungen, die eine der konfigurierten Rollen enthalten.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • roles: Eine durch Trennzeichen getrennte Liste autorisierter Rollen.

Im folgenden Beispiel wird eine Roles Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Roles=role_01,role_02"
        ]
    }
]

Bereiche

Die Scopes Factory autorisiert Anforderungen, die einen der konfigurierten OAuth Bereiche enthalten.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • scopes: Eine durch Trennzeichen getrennte Liste autorisierter OAuth Bereiche.

Im folgenden Beispiel wird eine Scopes Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Scopes=api.read,api.write,user"
        ]
    }
]

StoreIpAddress

Die StoreIPAddress Fabrik wird nur für die Erweiterungsentwicklung und im Kontext der Anwendung verwendet.

Diese Factory akzeptiert den folgenden Konfigurationsparameter:

  • attribute name: Der Name, der zum Speichern der IP als Exchange-Attribut verwendet wird.

Im folgenden Beispiel wird eine StoreIPAddress Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreIpAddress=ip"
        ]
    }
]

SSO-Anmeldung

Die SSO login Factory leitet zur Authentifizierung um, wenn kein gültiges Autorisierungstoken vorhanden ist. Diese Factory wird als Wert in der Routendefinition und nicht als boolean expliziter Filter konfiguriert.

Im folgenden Beispiel wird eine SSO login Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "ssoEnabled": true
    }
]

StoreHeader

Die StoreHeader Factory speichert einen Headerwert im Kontext der Anwendung. Dieser Filter wird nur für die Erweiterungsentwicklung verwendet.

Diese Factory akzeptiert die folgenden Konfigurationsparameter:

  • headers: Eine Liste der zu überprüfenden Kopfzeilen. Die erste gefundene wird verwendet.
  • attribute name: Der Name, der zum Speichern des Headerwerts als Exchange-Attribut verwendet wird.

Im folgenden Beispiel wird eine StoreHeader Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
        ]
    }
]

XmlToJson

Die XmlToJson Factory wandelt den XML-Antworttext in DEN JSON-Antworttext um.

Für diese Factory gibt es keine Parameter.

Im folgenden Beispiel wird eine XmlToJson Factory konfiguriert:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "XmlToJson"
        ]
    }
]

Nächste Schritte