Delen via


Routefilters voor VMware Spring Cloud Gateway gebruiken met het Azure Spring Apps Enterprise-abonnement

Notitie

De Basic-, Standard- en Enterprise-abonnementen worden afgeschaft vanaf medio maart 2025, met een pensioenperiode van 3 jaar. We raden u aan om over te stappen naar Azure Container Apps. Zie de aankondiging over buitengebruikstelling van Azure Spring Apps voor meer informatie.

Het standaardverbruik en het speciale abonnement worden vanaf 30 september 2024 afgeschaft, met een volledige afsluiting na zes maanden. We raden u aan om over te stappen naar Azure Container Apps. Zie Azure Spring Apps Standard-verbruik en toegewezen abonnement migreren naar Azure Container Apps voor meer informatie.

Dit artikel is van toepassing op:❌ Basic/Standard ✔️ Enterprise

In dit artikel wordt uitgelegd hoe u routefilters voor VMware Spring Cloud Gateway gebruikt met het Azure Spring Apps Enterprise-plan om aanvragen naar uw toepassingen te routeren.

VMware Spring Cloud Gateway is een commercieel VMware Tanzu-onderdeel op basis van het opensource Spring Cloud Gateway-project. Spring Cloud Gateway verwerkt geavanceerde problemen voor API-ontwikkelteams, zoals eenmalige aanmelding (SSO), toegangsbeheer, snelheidsbeperking, tolerantie, beveiliging en meer. U kunt api-levering versnellen met behulp van moderne cloudeigen patronen en elke programmeertaal die u kiest voor API-ontwikkeling.

VMware Spring Cloud Gateway bevat de volgende functies:

  • Dynamische routeringsconfiguratie, onafhankelijk van afzonderlijke toepassingen die kunnen worden toegepast en gewijzigd zonder hercompilatie.
  • Commerciële API-routefilters voor het transport van geautoriseerde JSON-webtokenclaims (JWT) naar toepassingsservices.
  • Autorisatie van clientcertificaat.
  • Methoden voor snelheidsbeperking.
  • Configuratie van circuitonderbreker.
  • Ondersteuning voor toegang tot toepassingsservices via HTTP Basic Authentication-referenties.

Voor integratie met API Portal voor VMware Tanzu genereert VMware Spring Cloud Gateway automatisch documentatie over OpenAPI versie 3 na toevoegingen of wijzigingen van de routeconfiguratie. Zie API Portal gebruiken voor VMware Tanzu voor meer informatie.

Vereisten

Filters gebruiken

U gebruikt filters in uw Spring Cloud Gateway-configuratie om te reageren op de binnenkomende aanvraag of uitgaande reactie op een routeconfiguratie.

U kunt bijvoorbeeld een filter gebruiken om een HTTP-header toe te voegen of toegang te weigeren op basis van een autorisatietoken.

Opensource-filters gebruiken

Spring Cloud Gateway OSS bevat verschillende GatewayFilter factory's die worden gebruikt om filters voor routes te maken. In de volgende secties worden deze factory's beschreven.

AddRequestHeader

De AddRequestHeader factory voegt een header toe aan de headers van de downstreamaanvraag voor alle overeenkomende aanvragen.

Deze fabriek accepteert de volgende configuratieparameters:

  • name
  • value

In het volgende voorbeeld wordt een AddRequestHeader factory geconfigureerd waarmee de header X-Request-red:blue wordt toegevoegd aan de headers van de downstreamaanvraag voor alle overeenkomende aanvragen:

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

De AddRequestHeader factory heeft toegang tot de URI-variabelen die worden gebruikt om een pad of host te vinden. U kunt URI-variabelen in de waarde gebruiken en de variabelen worden tijdens runtime uitgebreid.

In het volgende voorbeeld wordt een AddRequestHeader factory geconfigureerd die gebruikmaakt van een variabele:

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

AddRequestHeadersIfNotPresent

De AddRequestHeadersIfNotPresent factory voegt headers toe als deze niet aanwezig zijn in de oorspronkelijke aanvraag.

Deze factory accepteert de volgende configuratieparameter:

  • headers: Een door komma's gescheiden lijst met sleutel-waardeparen (headernaam, headerwaarde).

In het volgende voorbeeld wordt een AddRequestHeadersIfNotPresent fabriek geconfigureerd:

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

AddRequestParameter

De AddRequestParameter factory voegt een parameter toe aan de queryreeks van de downstreamaanvraag voor alle overeenkomende aanvragen.

Deze fabriek accepteert de volgende configuratieparameters:

  • name
  • value

In het volgende voorbeeld wordt een AddRequestParameter factory geconfigureerd waarmee een red=blue parameter wordt toegevoegd aan de queryreeks van de downstreamaanvraag voor alle overeenkomende aanvragen:

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

De AddRequestParameter factory heeft toegang tot de URI-variabelen die worden gebruikt om een pad of host te vinden. U kunt URI-variabelen in de waarde gebruiken en de variabelen worden tijdens runtime uitgebreid.

In het volgende voorbeeld wordt een AddRequestParameter factory geconfigureerd die gebruikmaakt van een variabele:

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

AddResponseHeader

De AddResponseHeader factory voegt een header toe aan de headers van het downstreamantwoord voor alle overeenkomende aanvragen.

Deze fabriek accepteert de volgende configuratieparameters:

  • name
  • value

In het volgende voorbeeld wordt een AddResponseHeader factory geconfigureerd waarmee een X-Response-Red:Blue header wordt toegevoegd aan de headers van het downstreamantwoord voor alle overeenkomende aanvragen:

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

De AddResponseHeader factory heeft toegang tot de URI-variabelen die worden gebruikt om een pad of host te vinden. U kunt URI-variabelen in de waarde gebruiken en de variabelen worden tijdens runtime uitgebreid.

In het volgende voorbeeld wordt een AddResponseHeader factory geconfigureerd die gebruikmaakt van een variabele:

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

CircuitBreaker

De CircuitBreaker fabriek verpakt routes in een circuitonderbreker.

Deze fabriek accepteert de volgende configuratieparameters:

  • name: De naam van de circuitonderbreker.
  • fallbackUri: De omleidings-URI, die een lokale route of externe handler kan zijn.
  • status codes (optioneel): De door dubbele punt gescheiden lijst met statuscodes die overeenkomen, in getal- of tekstopmaak.
  • failure rate (optioneel): de drempelwaarde waarboven de circuitonderbreker wordt geopend. De standaardwaarde is 50%.
  • duration (optioneel): De tijd die moet worden gewacht voordat u opnieuw sluit. De standaardwaarde is 60 seconden.

In het volgende voorbeeld wordt een CircuitBreaker fabriek geconfigureerd:

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

DeDupeResponseHeader

De DeDupeResponseHeader factory verwijdert dubbele waarden van antwoordheaders.

Deze fabriek accepteert de volgende configuratieparameters:

  • name: Een door spaties gescheiden lijst met headernamen.
  • strategy (optioneel): De geaccepteerde waarden zijn RETAIN_FIRST, RETAIN_LASTen RETAIN_UNIQUE. De standaardwaarde is RETAIN_FIRST.

In het volgende voorbeeld wordt een DeDupeResponseHeader factory geconfigureerd waarmee dubbele waarden van Access-Control-Allow-Credentials en Access-Control-Allow-Origin antwoordheaders worden verwijderd wanneer beide waarden worden toegevoegd door de CORS-logica van de gateway en de downstreamlogica:

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

Terugvalheaders

De FallbackHeaders factory voegt een uitzondering voor circuitonderbrekers toe aan een header. Dit filter vereist het gebruik van het CircuitBreaker filter in een andere route.

Er zijn geen parameters voor deze fabriek.

In het volgende voorbeeld wordt een FallbackHeaders factory geconfigureerd met het uitzonderingstype, bericht en (indien beschikbaar) hoofdoorzaakuitzonderingstype en bericht dat het FallbackHeaders filter aan de aanvraag toevoegt:

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

U kunt de namen van de headers in de configuratie overschrijven door de waarden van de volgende parameters in te stellen (vermeld met de standaardwaarden):

  • executionExceptionTypeHeaderName ("Execution-Exception-Type")
  • executionExceptionMessageHeaderName ("Execution-Exception-Message")
  • rootCauseExceptionTypeHeaderName ("Hoofdoorzaak-uitzonderingstype")
  • rootCauseExceptionMessageHeaderName ("Hoofdoorzaak-uitzonderingsbericht")

JSONToGRPC

De JSONToGRPCFilter factory converteert een JSON-nettolading naar een gRPC-aanvraag.

Deze factory accepteert de volgende configuratieparameter:

  • protoDescriptor: Een protodescriptorbestand.

U kunt dit bestand genereren door de --descriptor_set_out vlag te gebruiken protoc en op te geven, zoals wordt weergegeven in het volgende voorbeeld:

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

Notitie

De streaming parameter wordt niet ondersteund.

In het volgende voorbeeld wordt een JSONToGRPCFilter fabriek geconfigureerd met behulp van de uitvoer van protoc:

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

LocalResponseCache

De LocalResponseCache factory overschrijft de configuratie van de lokale antwoordcache voor specifieke routes wanneer de globale cache wordt geactiveerd.

Deze fabriek accepteert de volgende configuratieparameters:

  • size: De maximale toegestane grootte van de cachevermeldingen voor deze route voordat het verwijderen van de cache begint (in KB, MB en GB).
  • timeToLive: De toegestane levensduur van een cachevermelding vóór de vervaldatum. Gebruik het achtervoegsel s voor de duur voor seconden, m voor minuten of h uren.

In het volgende voorbeeld wordt een LocalResponseCache fabriek geconfigureerd:

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

MapRequestHeader

De MapRequestHeader factory voegt een header toe aan de downstream-aanvraag met bijgewerkte waarden uit de header van de binnenkomende HTTP-aanvraag.

Deze fabriek accepteert de volgende configuratieparameters:

  • fromHeader
  • toHeader

Deze factory maakt een nieuwe benoemde header (toHeader) en de waarde wordt geëxtraheerd uit een bestaande benoemde header (fromHeader) uit de binnenkomende HTTP-aanvraag. Als de invoerkop niet bestaat, heeft het filter geen effect. Als de nieuwe benoemde header al bestaat, worden de waarden uitgebreid met de nieuwe waarden.

In het volgende voorbeeld wordt een MapRequestHeader factory geconfigureerd waarmee de X-Request-Red:<values> header wordt toegevoegd aan de downstreamaanvraag met bijgewerkte waarden uit de header van Blue de binnenkomende HTTP-aanvraag:

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

Voorvoegselpad

De PrefixPath factory voegt een voorvoegsel toe aan het pad van alle aanvragen.

Deze factory accepteert de volgende configuratieparameter:

  • prefix

In het volgende voorbeeld wordt een PrefixPath factory geconfigureerd waarmee het voorvoegsel /api wordt toegevoegd aan het pad van alle aanvragen, zodat een aanvraag naar /catalog /api/catalog:

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

PreserveHostHeader

De PreserveHostHeader factory stelt een aanvraagkenmerk in dat door het routeringsfilter wordt gecontroleerd om te bepalen of de oorspronkelijke hostheader of de hostheader moet worden verzonden die wordt bepaald door de HTTP-client.

Er zijn geen parameters voor deze fabriek.

In het volgende voorbeeld wordt een PreserveHostHeader fabriek geconfigureerd:

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

RedirectTo

De RedirectTo factory voegt een omleiding toe aan de oorspronkelijke URL.

Deze fabriek accepteert de volgende configuratieparameters:

  • status: Een omleidings-HTTP-code uit de 300-serie, zoals 301.
  • url: De waarde van de Location koptekst. Moet een geldige URI zijn. Voor relatieve omleidingen moet u gebruiken uri: no://op als de URI van uw routedefinitie.

In het volgende voorbeeld wordt een RedirectTo fabriek geconfigureerd waarmee een status 302 met een Location:https://acme.org header wordt verzonden om een omleiding uit te voeren:

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

RemoveJsonAttributesResponseBody

De RemoveJsonAttributesResponseBody factory verwijdert de JSON-kenmerken en de bijbehorende waarden uit JSON-antwoordteksten.

Deze fabriek accepteert de volgende configuratieparameters:

  • attribute names: Een door komma's gescheiden lijst met de namen van kenmerken die moeten worden verwijderd uit een JSON-antwoord.
  • delete recursively(optioneel, booleaans): Een configuratie die de kenmerken alleen op hoofdniveau () of recursief (falsetrue) verwijdert. De standaardwaarde is false.

In het volgende voorbeeld wordt een RemoveJsonAttributesResponseBody fabriek geconfigureerd:

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

RemoveRequestHeader

De RemoveRequestHeader factory verwijdert een header uit de downstreamaanvraag.

Deze factory accepteert de volgende configuratieparameter:

  • name: de naam van de koptekst die moet worden verwijderd.

De volgende vermelding configureert een RemoveRequestHeader factory die de X-Request-Foo header verwijdert voordat deze downstream wordt verzonden:

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

RemoveRequestParameter

De RemoveRequestParameter factory verwijdert een parameter voordat deze downstream wordt verzonden.

Deze factory accepteert de volgende configuratieparameter:

  • name: de naam van de queryparameter die moet worden verwijderd.

In het volgende voorbeeld wordt een RemoveRequestParameter factory geconfigureerd waarmee de red parameter wordt verwijderd voordat deze downstream wordt verzonden:

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

RemoveResponseHeader

De RemoveResponseHeader factory verwijdert een header uit het antwoord voordat deze wordt geretourneerd naar de gatewayclient.

Deze factory accepteert de volgende configuratieparameter:

  • name: de naam van de koptekst die moet worden verwijderd.

In de volgende vermelding wordt een RemoveResponseHeader factory geconfigureerd waarmee de X-Response-Foo header uit het antwoord wordt verwijderd voordat deze wordt geretourneerd naar de gatewayclient:

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

RequestHeaderSize

De RequestHeaderSize factory bepaalt de grootte van de aanvraagheader.

Deze fabriek accepteert de volgende configuratieparameters:

  • maxSize: De maximale gegevensgrootte die is toegestaan door de aanvraagheader, inclusief sleutel en waarde.
  • errorHeaderName: De naam van de antwoordheader met een foutbericht. Standaard is errorMessagede naam van de antwoordheader.

De volgende vermelding configureert een RequestHeaderSize factory die een status 431 verzendt als de grootte van een aanvraagheader groter is dan 1000 bytes:

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

HerschrijvenLocationResponseHeader

De RewriteLocationResponseHeader factory wijzigt de waarde van de Location antwoordheader, meestal om back-endspecifieke details te verwijderen.

Deze fabriek accepteert de volgende configuratieparameters:

  • stripVersionMode: Deze parameter heeft de volgende mogelijke waarden: NEVER_STRIP, AS_IN_REQUESTen ALWAYS_STRIP. De standaardwaarde is AS_IN_REQUEST.

    • NEVER_STRIP: De versie is niet verwijderd, zelfs niet als het oorspronkelijke aanvraagpad geen versie bevat.
    • AS_IN_REQUEST: De versie wordt alleen verwijderd als het oorspronkelijke aanvraagpad geen versie bevat.
    • ALWAYS_STRIP: De versie wordt altijd verwijderd, zelfs als het oorspronkelijke aanvraagpad versie bevat.
  • hostValue: Deze parameter wordt gebruikt om het host:port gedeelte van de antwoordheader Location te vervangen wanneer deze is opgegeven. Als deze niet is opgegeven, wordt de waarde van de Host aanvraagheader gebruikt.

  • protocolsRegex: Een geldige regex String, waarmee de protocolnaam overeenkomt. Als deze niet overeenkomt, werkt het filter niet. De standaardwaarde is http|https|ftp|ftps.

  • locationHeaderName

In de volgende lijst wordt een RewriteLocationResponseHeader fabriek geconfigureerd:

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

In dit voorbeeld wordt voor een aanvraagwaarde van POST api.example.com/some/object/namede antwoordheader de waarde van object-service.prod.example.net/v2/some/object/id de Location antwoordheader herschreven als api.example.com/some/object/id.

Herschrijfpad

De RewritePath factory maakt gebruik van reguliere Java-expressies voor een flexibele manier om het aanvraagpad te herschrijven.

Deze fabriek accepteert de volgende configuratieparameters:

  • regexp
  • replacement

In de volgende lijst wordt een RewritePath fabriek geconfigureerd:

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

In dit voorbeeld wordt voor een aanvraagpad van /red/bluedeze configuratie het pad ingesteld op /blue voordat u de downstreamaanvraag indient.

HerschrijvenResponseHeader

De RewriteResponseHeader factory maakt gebruik van reguliere Java-expressies voor een flexibele manier om de waarde van de antwoordheader te herschrijven.

Deze fabriek accepteert de volgende configuratieparameters:

  • name
  • regexp
  • replacement

In het volgende voorbeeld wordt een RewriteResponseHeader fabriek geconfigureerd:

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

In dit voorbeeld wordt de configuratie voor een headerwaarde ingesteld op /42?user=ford&password=***&flag=true na het maken van /42?user=ford&password=omg!what&flag=truede downstreamaanvraag.

SetPath

De SetPath factory biedt een eenvoudige manier om het aanvraagpad te bewerken door sjabloonsegmenten van het pad toe te staan. Dit filter maakt gebruik van de URI-sjablonen van Spring Framework en maakt meerdere overeenkomende segmenten mogelijk.

Deze factory accepteert de volgende configuratieparameter:

  • template

In het volgende voorbeeld wordt een SetPath fabriek geconfigureerd:

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

In dit voorbeeld wordt voor een aanvraagpad van /red/bluedeze configuratie het pad ingesteld op /blue voordat u de downstreamaanvraag indient.

SetRequestHeader

De SetRequestHeader fabriek vervangt alle headers (in plaats van toe te voegen) door de opgegeven naam.

Deze fabriek accepteert de volgende configuratieparameters:

  • name
  • value

In de volgende lijst wordt een SetRequestHeader fabriek geconfigureerd:

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

In dit voorbeeld heeft de downstream-server gereageerd met X-Request-Red:1234, en deze wordt vervangen door X-Request-Red:Blue.

De SetRequestHeader factory heeft toegang tot de URI-variabelen die worden gebruikt om een pad of host te vinden. U kunt URI-variabelen in de waarde gebruiken en de variabelen worden tijdens runtime uitgebreid.

In het volgende voorbeeld wordt een SetRequestHeader factory geconfigureerd die gebruikmaakt van een variabele:

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

SetResponseHeader

De SetResponseHeader fabriek vervangt alle headers (in plaats van toe te voegen) door de opgegeven naam.

Deze fabriek accepteert de volgende configuratieparameters:

  • name
  • value

In de volgende lijst wordt een SetResponseHeader fabriek geconfigureerd:

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

In dit voorbeeld heeft de downstream-server gereageerd met X-Response-Red:1234, en deze wordt vervangen door X-Response-Red:Blue.

De SetResponseHeader factory heeft toegang tot de URI-variabelen die worden gebruikt om een pad of host te vinden. U kunt URI-variabelen in de waarde gebruiken en de variabelen worden tijdens runtime uitgebreid.

In het volgende voorbeeld wordt een SetResponseHeader factory geconfigureerd die gebruikmaakt van een variabele:

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

SetStatus

De SetStatus factory configureert de antwoordstatus van de serveraanvraag.

Deze factory accepteert de volgende configuratieparameter:

  • status: Een geldige Spring-waarde HttpStatus , die een geheel getal kan bevatten, zoals 404, of de tekenreeksweergave van de opsomming, zoals NOT_FOUND.

In de volgende lijst wordt een SetStatus fabriek geconfigureerd:

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

StripPrefix

De StripPrefix factory verwijdert het voorvoegsel uit de aanvraag voordat deze downstream wordt verzonden.

Deze factory accepteert de volgende configuratieparameter:

  • parts: Het aantal onderdelen in het pad dat van de aanvraag moet worden verwijderd voordat deze downstream wordt verzonden. De standaardwaarde is 1.

In het volgende voorbeeld wordt een StripPrefix fabriek geconfigureerd:

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

In dit voorbeeld wordt een aanvraag gedaan via de gateway naar /name/blue/red. De aanvraag die nameservice is ingediend, wordt weergegeven als nameservice/red.

Opnieuw proberen

De Retry factory bepaalt het aantal nieuwe pogingen dat is geprobeerd.

Deze fabriek accepteert de volgende configuratieparameters:

  • retries: Het aantal nieuwe pogingen dat moet worden geprobeerd.
  • statuses: De HTTP-statuscodes die opnieuw moeten worden geprobeerd, vertegenwoordigd door gebruik te maken van org.springframework.http.HttpStatus.
  • methods: De HTTP-methoden die opnieuw moeten worden geprobeerd, vertegenwoordigd door gebruik te maken van org.springframework.http.HttpMethod.
  • series: De reeks statuscodes die opnieuw moeten worden geprobeerd, vertegenwoordigd door gebruik te maken van org.springframework.http.HttpStatus.Series.
  • exceptions: De lijst met gegenereerde uitzonderingen die opnieuw moeten worden geprobeerd.
  • backoff: De geconfigureerde exponentiële uitstel voor de nieuwe pogingen. Nieuwe pogingen worden uitgevoerd na een uitstelinterval van firstBackoff * (factor ^ n), waarbij n de iteratie is. Als maxBackoff dit is geconfigureerd, is de maximale uitstellimiet beperkt tot maxBackoff. Als basedOnPreviousValue waar is, wordt het backoff berekend met behulp van prevBackoff * factor.

De volgende standaardwaarden zijn geconfigureerd voor het Retry filter, wanneer deze is ingeschakeld:

  • retries:driemaal.
  • series: 5XX-serie.
  • methods: GET-methode.
  • exceptions: IOException en TimeoutException.
  • backoff:invalide.

In het volgende voorbeeld wordt een Retry fabriek geconfigureerd:

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

RequestSize

De RequestSize fabriek kan een aanvraag beperken om de downstreamservice te bereiken wanneer de aanvraaggrootte groter is dan de toegestane limiet.

Deze factory accepteert de volgende configuratieparameter:

  • maxSize: Een DataSize type waarbij waarden worden gedefinieerd als een getal gevolgd door een optioneel DataUnit achtervoegsel zoals KB of MB. De standaardwaarde voor achtervoegsel is B voor bytes. Dit is de toegestane groottelimiet van de aanvraag die is gedefinieerd in bytes.

In het volgende voorbeeld wordt een RequestSize fabriek geconfigureerd:

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

Wanneer de aanvraag in dit voorbeeld wordt geweigerd vanwege de grootte, stelt de RequestSize factory de antwoordstatus 413 Payload Too Large in op een andere header errorMessage.

In het volgende voorbeeld ziet u een errorMessage:

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

TokenRelay

De TokenRelay factory stuurt een OAuth2 toegangstoken door naar downstream-resources. Dit filter is geconfigureerd als een boolean waarde in de routedefinitie in plaats van een expliciet filter.

In het volgende voorbeeld wordt een TokenRelay fabriek geconfigureerd:

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

Commerciële filters gebruiken

Spring Cloud Gateway voor Kubernetes biedt ook veel aangepaste GatewayFilter factory's. In de volgende secties worden deze factory's beschreven.

AllowedRequestCookieCount

De AllowedRequestCookieCount fabriek bepaalt of een overeenkomende aanvraag mag doorgaan op basis van het aantal cookies.

Deze factory accepteert de volgende configuratieparameter:

  • amount: Het aantal toegestane cookies.

In het volgende voorbeeld wordt een AllowedRequestCookieCount fabriek geconfigureerd:

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

AllowedRequestHeadersCount

De AllowedRequestHeadersCount factory bepaalt of een overeenkomende aanvraag mag doorgaan op basis van het aantal headers.

Deze factory accepteert de volgende configuratieparameter:

  • amount: Het aantal toegestane headers.

In het volgende voorbeeld wordt een AllowedRequestHeadersCount fabriek geconfigureerd:

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

AllowedRequestQueryParamsCount

De AllowedRequestQueryParamsCount factory bepaalt of een overeenkomende aanvraag mag doorgaan op basis van de parameters van de getalquery.

Deze factory accepteert de volgende configuratieparameter:

  • amount: Het aantal toegestane parameters.

In het volgende voorbeeld wordt een AllowedRequestQueryParamsCount fabriek geconfigureerd:

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

BasicAuth

De BasicAuth factory voegt een BasicAuth Authorization header toe aan aanvragen.

Er zijn geen parameters voor deze fabriek.

In het volgende voorbeeld wordt een BasicAuth fabriek geconfigureerd:

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

ClaimHeader

De ClaimHeader factory kopieert gegevens van een JWT-claim naar een HTTP-header.

Deze fabriek accepteert de volgende configuratieparameters:

  • Claim name: De hoofdlettergevoelige naam van de claim die moet worden doorgegeven.
  • Header name: De naam van de HTTP-header.

In het volgende voorbeeld wordt een ClaimHeader fabriek geconfigureerd:

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

ClientCertificateHeader

De ClientCertificateHeader factory valideert het X-Forwarded-Client-Cert headercertificaat.

Deze fabriek accepteert de volgende configuratieparameters:

  • domain pattern: De waarde volgens de X-Forwarded-Client-Cert mogelijkheid van Kubernetes om de CA van het clientcertificaat te herkennen.
  • certificate fingerprint(optioneel): de vingerafdruk van het TLS/SSL-certificaat.

In het volgende voorbeeld wordt een ClientCertificateHeader fabriek geconfigureerd:

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

Cors

De Cors factory activeert de CORS-validaties op een route.

Deze factory accepteert de volgende configuratieparameters die zijn ingedeeld als sleutel-waardeparen voor CORS-opties:

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

In het volgende voorbeeld wordt een Cors fabriek geconfigureerd:

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

JsonToXml

De JsonToXml factory transformeert de hoofdtekst van het JSON-antwoord in de hoofdtekst van het XML-antwoord.

Deze factory accepteert de volgende configuratieparameter:

  • wrapper: de naam van de hoofdtag voor het XML-antwoord als een andere hoofdtag is vereist om geldige XML te genereren. De standaardwaarde is response.

In het volgende voorbeeld wordt een JsonToXml fabriek geconfigureerd:

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

RateLimit

De RateLimit factory bepaalt of een overeenkomende aanvraag mag doorgaan op basis van het aanvraagvolume.

Deze fabriek accepteert de volgende configuratieparameters:

  • request limit: Het maximum aantal aanvragen dat tijdens het venster is geaccepteerd.
  • window duration: De duur van het venster in milliseconden. U kunt ook de sof m h achtervoegsels gebruiken om de duur in seconden, minuten of uren op te geven.
  • partition source (optioneel): De locatie van de partitiesleutel (claim, headerof IPs).
  • partition key (optioneel): de waarde die wordt gebruikt voor het partitioneren van aanvraagtellers.

In het volgende voorbeeld wordt een RateLimit fabriek geconfigureerd:

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

In de volgende voorbeelden ziet u andere RateLimit configuraties:

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

De RestrictRequestHeaders factory bepaalt of een overeenkomende aanvraag mag doorgaan op basis van de headers.

Als er HTTP-headers zijn die niet in de hoofdlettergevoelige headerList configuratie staan, wordt er een antwoord geretourneerd naar 431 Forbidden error de client.

Deze factory accepteert de volgende configuratieparameter:

  • headerList: De hoofdlettergevoelige lijst met namen van toegestane headers.

In het volgende voorbeeld wordt een RestrictRequestHeaders fabriek geconfigureerd:

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

AllResponseHeaders herschrijven

De RewriteAllResponseHeaders factory herschrijft meerdere antwoordheaders tegelijk.

Deze fabriek accepteert de volgende configuratieparameters:

  • pattern to match: De reguliere expressie die overeenkomt met headerwaarden.
  • replacement: De vervangingswaarde.

In het volgende voorbeeld wordt een RewriteAllResponseHeaders fabriek geconfigureerd:

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

RewriteResponseBody

De RewriteResponseBody fabriek wijzigt de hoofdtekst van een antwoord.

Deze factory accepteert de volgende configuratieparameters die zijn ingedeeld als een door komma's gescheiden lijst met sleutel-waardeparen, waarbij elk paar het formulier pattern to match:replacementaccepteert:

  • pattern to match: De reguliere expressie die overeenkomt met tekst in de hoofdtekst van het antwoord.
  • replacement: De vervangingswaarde.

In het volgende voorbeeld wordt een RewriteResponseBody fabriek geconfigureerd:

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

HerschrijvenJsonAttributesResponseBody

De RewriteJsonAttributesResponseBody factory herschrijft JSON-kenmerken met behulp van JSONPath notatie.

Deze factory accepteert de volgende configuratieparameters die zijn ingedeeld als een door komma's gescheiden lijst met sleutel-waardeparen, waarbij elk paar het formulier jsonpath:replacementaccepteert:

  • jsonpath: De JSONPath expressie die moet overeenkomen met de hoofdtekst van het antwoord.
  • replacement: De vervangingswaarde.

In het volgende voorbeeld wordt een RewriteJsonAttributesResponseBody fabriek geconfigureerd:

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

Rollen

De Roles factory autoriseert aanvragen die een van de geconfigureerde rollen bevatten.

Deze factory accepteert de volgende configuratieparameter:

  • roles: Een door komma's gescheiden lijst met geautoriseerde rollen.

In het volgende voorbeeld wordt een Roles fabriek geconfigureerd:

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

Bereiken

De Scopes factory autoriseert aanvragen die een van de geconfigureerde OAuth bereiken bevatten.

Deze factory accepteert de volgende configuratieparameter:

  • scopes: Een door komma's gescheiden lijst met geautoriseerde OAuth bereiken.

In het volgende voorbeeld wordt een Scopes fabriek geconfigureerd:

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

StoreIpAddress

De StoreIPAddress factory wordt alleen gebruikt voor uitbreidingsontwikkeling en in de context van de toepassing.

Deze factory accepteert de volgende configuratieparameter:

  • attribute name: De naam die wordt gebruikt om het IP-adres op te slaan als exchange-kenmerk.

In het volgende voorbeeld wordt een StoreIPAddress fabriek geconfigureerd:

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

SSO-aanmelding

De SSO login factory wordt omgeleid om te verifiëren als er geen geldig autorisatietoken is. Deze factory is geconfigureerd als een boolean waarde in de routedefinitie in plaats van een expliciet filter.

In het volgende voorbeeld wordt een SSO login fabriek geconfigureerd:

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

StoreHeader

In StoreHeader de factory wordt een headerwaarde opgeslagen in de context van de toepassing. Dit filter wordt alleen gebruikt voor uitbreidingsontwikkeling.

Deze fabriek accepteert de volgende configuratieparameters:

  • headers: Een lijst met kopteksten die u wilt controleren. De eerste gevonden wordt gebruikt.
  • attribute name: De naam die wordt gebruikt om de headerwaarde op te slaan als een exchange-kenmerk.

In het volgende voorbeeld wordt een StoreHeader fabriek geconfigureerd:

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

XmlToJson

De XmlToJson factory transformeert de hoofdtekst van het XML-antwoord in de hoofdtekst van het JSON-antwoord.

Er zijn geen parameters voor deze fabriek.

In het volgende voorbeeld wordt een XmlToJson fabriek geconfigureerd:

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

Volgende stappen