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
- Een al ingericht Azure Spring Apps Enterprise-planservice-exemplaar waarvoor Spring Cloud Gateway is ingeschakeld. Zie quickstart: Apps bouwen en implementeren in Azure Spring Apps met behulp van het Enterprise-abonnement voor meer informatie.
- Azure CLI versie 2.0.67 of hoger. Gebruik de volgende opdracht om de Azure Spring Apps-extensie te installeren:
az extension add --name spring
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 zijnRETAIN_FIRST
,RETAIN_LAST
enRETAIN_UNIQUE
. De standaardwaarde isRETAIN_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 achtervoegsels
voor de duur voor seconden,m
voor minuten ofh
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, zoals301
.url
: De waarde van deLocation
koptekst. Moet een geldige URI zijn. Voor relatieve omleidingen moet u gebruikenuri: 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 (false
true
) verwijdert. De standaardwaarde isfalse
.
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 iserrorMessage
de 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_REQUEST
enALWAYS_STRIP
. De standaardwaarde isAS_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 hethost:port
gedeelte van de antwoordheaderLocation
te vervangen wanneer deze is opgegeven. Als deze niet is opgegeven, wordt de waarde van deHost
aanvraagheader gebruikt.protocolsRegex
: Een geldige regexString
, waarmee de protocolnaam overeenkomt. Als deze niet overeenkomt, werkt het filter niet. De standaardwaarde ishttp|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/name
de 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/blue
deze 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=true
de 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/blue
deze 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-waardeHttpStatus
, die een geheel getal kan bevatten, zoals404
, of de tekenreeksweergave van de opsomming, zoalsNOT_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 vanorg.springframework.http.HttpStatus
.methods
: De HTTP-methoden die opnieuw moeten worden geprobeerd, vertegenwoordigd door gebruik te maken vanorg.springframework.http.HttpMethod
.series
: De reeks statuscodes die opnieuw moeten worden geprobeerd, vertegenwoordigd door gebruik te maken vanorg.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 vanfirstBackoff * (factor ^ n)
, waarbijn
de iteratie is. AlsmaxBackoff
dit is geconfigureerd, is de maximale uitstellimiet beperkt totmaxBackoff
. AlsbasedOnPreviousValue
waar is, wordt hetbackoff
berekend met behulp vanprevBackoff * factor
.
De volgende standaardwaarden zijn geconfigureerd voor het Retry
filter, wanneer deze is ingeschakeld:
retries
:driemaal.series
: 5XX-serie.methods
: GET-methode.exceptions
:IOException
enTimeoutException
.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
: EenDataSize
type waarbij waarden worden gedefinieerd als een getal gevolgd door een optioneelDataUnit
achtervoegsel zoalsKB
ofMB
. De standaardwaarde voor achtervoegsel isB
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 deX-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 isresponse
.
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 des
ofm
h
achtervoegsels gebruiken om de duur in seconden, minuten of uren op te geven.partition source
(optioneel): De locatie van de partitiesleutel (claim
,header
ofIPs
).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:replacement
accepteert:
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:replacement
accepteert:
jsonpath
: DeJSONPath
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 geautoriseerdeOAuth
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"
]
}
]