Comment utiliser des filtres de routage VMware Spring Cloud Gateway avec le plan Azure Spring Apps Enterprise
Remarque
Azure Spring Apps est le nouveau nom du service Azure Spring Cloud. Bien que le service ait un nouveau nom, vous verrez l’ancien nom à divers endroits pendant un certain temps, car nous travaillons à mettre à jour les ressources telles que les captures d’écran, les vidéos et les diagrammes.
Cet article s’applique à :❌ De base/Standard ✔️ Entreprise
Cet article explique comment utiliser des filtres de routage VMware Spring Cloud Gateway avec le plan Azure Spring Apps Enterprise pour acheminer les demandes vers vos applications.
VMware Spring Cloud Gateway est un composant VMware Tanzu commercial basé sur le projet open source Spring Cloud Gateway. Spring Cloud Gateway gère les problèmes transversaux que rencontrent les équipes de développement d’API, comme l’authentification unique (SSO), le contrôle d’accès, la limitation du débit, la résilience, la sécurité, etc. Vous pouvez accélérer la livraison des API à l’aide de modèles modernes natifs Cloud et de n’importe quel langage de programmation pour le développement d’API.
VMware Spring Cloud Gateway propose les fonctionnalités suivantes :
- Configuration du routage dynamique, indépendamment des applications individuelles qui peuvent être appliquées et modifiées sans recompilation.
- Filtres d’itinéraires d’API commerciales pour le transport d’une revendication json Web Token (JWT) autorisée aux services d’application.
- Autorisation de certificat client.
- Approches de limitation du débit.
- Configuration du disjoncteur.
- Prise en charge de l’accès aux services d’application via les informations d’identification d’authentification HTTP de base.
Pour intégrer le portail API pour VMware Tanzu, VMware Spring Cloud Gateway génère automatiquement la documentation OpenAPI version 3 après les ajouts ou modifications de configuration de routage. Pour plus d’informations, consultez Utiliser le portail API pour VMware Tanzu.
Prérequis
- Une instance de service de plan Azure Spring Apps Enterprise déjà provisionnée avec Spring Cloud Gateway activée. Pour plus d’informations, consultez Démarrage rapide : Créer et déployer des applications sur Azure Spring Apps à l’aide du plan Entreprise.
- Azure CLI version 2.0.67 ou ultérieure. Utilisez la commande suivante pour installer l’extension Azure Spring Apps :
az extension add --name spring
.
Utiliser des filtres
Vous utilisez des filtres dans votre configuration Spring Cloud Gateway pour agir sur la demande entrante ou la réponse sortante à une configuration de routage.
Par exemple, vous pouvez utiliser un filtre pour ajouter un en-tête HTTP ou refuser l’accès en fonction d’un jeton d’autorisation.
Utiliser des filtres code source ouvert
Spring Cloud Gateway OSS comprend plusieurs GatewayFilter
fabriques utilisées pour créer des filtres pour les itinéraires. Les sections suivantes décrivent ces usines.
AddRequestHeader
La AddRequestHeader
fabrique ajoute un en-tête aux en-têtes de la requête en aval pour toutes les demandes correspondantes.
Cette fabrique accepte les paramètres de configuration suivants :
name
value
L’exemple suivant configure une AddRequestHeader
fabrique qui ajoute l’en-tête aux en-têtes X-Request-red:blue
de la requête en aval pour toutes les demandes correspondantes :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestHeader=X-Request-red, blue"
]
}
]
La AddRequestHeader
fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.
L’exemple suivant configure une AddRequestHeader
fabrique qui utilise une variable :
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddRequestHeader=X-Request-red, blue-{segment}"
]
}
]
AddRequestHeadersIfNotPresent
La AddRequestHeadersIfNotPresent
fabrique ajoute des en-têtes s’ils ne sont pas présents dans la requête d’origine.
Cette fabrique accepte le paramètre de configuration suivant :
headers
: liste séparée par des virgules de paires clé-valeur (nom d’en-tête, valeur d’en-tête).
L’exemple suivant configure une AddRequestHeadersIfNotPresent
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
]
}
]
AddRequestParameter
La AddRequestParameter
fabrique ajoute un paramètre à la chaîne de requête de la requête en aval pour toutes les demandes correspondantes.
Cette fabrique accepte les paramètres de configuration suivants :
name
value
L’exemple suivant configure une AddRequestParameter
fabrique qui ajoute un red=blue
paramètre à la chaîne de requête de la requête en aval pour toutes les demandes correspondantes :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddRequestParameter=red, blue"
]
}
]
La AddRequestParameter
fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.
L’exemple suivant configure une AddRequestParameter
fabrique qui utilise une variable :
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddRequestParameter=foo, bar-{segment}"
]
}
]
AddResponseHeader
La AddResponseHeader
fabrique ajoute un en-tête aux en-têtes de la réponse en aval pour toutes les demandes correspondantes.
Cette fabrique accepte les paramètres de configuration suivants :
name
value
L’exemple suivant configure une fabrique qui ajoute un AddResponseHeader
X-Response-Red:Blue
en-tête aux en-têtes de la réponse en aval pour toutes les demandes correspondantes :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AddResponseHeader=X-Response-Red, Blue"
]
}
]
La AddResponseHeader
fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.
L’exemple suivant configure une AddResponseHeader
fabrique qui utilise une variable :
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"AddResponseHeader=foo, bar-{segment}"
]
}
]
CircuitBreaker
L’usine CircuitBreaker
encapsule les itinéraires dans un disjoncteur.
Cette fabrique accepte les paramètres de configuration suivants :
name
: nom du disjoncteur.fallbackUri
: URI de réacheminement, qui peut être un itinéraire local ou un gestionnaire externe.status codes
(facultatif) : liste séparée par deux-points des codes d’état à mettre en correspondance, au format numérique ou texte.failure rate
(facultatif) : seuil au-dessus duquel le disjoncteur s’ouvre. La valeur par défaut est 50 %.duration
(facultatif) : délai d’attente avant de fermer à nouveau. La valeur par défaut est 60 secondes.
L’exemple suivant configure une CircuitBreaker
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
]
}
]
DeDupeResponseHeader
La DeDupeResponseHeader
fabrique supprime les valeurs en double des en-têtes de réponse.
Cette fabrique accepte les paramètres de configuration suivants :
name
: liste séparée par un espace des noms d’en-têtes.strategy
(facultatif) : les valeurs acceptées sontRETAIN_FIRST
,RETAIN_LAST
etRETAIN_UNIQUE
. La valeur par défaut estRETAIN_FIRST
.
L’exemple suivant configure une DeDupeResponseHeader
fabrique qui supprime les valeurs en double des en-têtes de réponse et Access-Control-Allow-Origin
des valeurs lorsque les deux valeurs sont ajoutées par la logique CORS de Access-Control-Allow-Credentials
passerelle et la logique en aval :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
]
}
]
FallbackHeaders
La FallbackHeaders
fabrique ajoute toute exception disjoncteur à un en-tête. Ce filtre nécessite l’utilisation du CircuitBreaker
filtre dans un autre itinéraire.
Il n’existe aucun paramètre pour cette fabrique.
L’exemple suivant configure une FallbackHeaders
fabrique avec le type d’exception, le message et (si disponible) le type d’exception et le message d’exception ajoutés par le FallbackHeaders
filtre à la demande :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
]
},
{
"predicates": [
"Path=/inCaseOfFailureUseThis"
],
"filters": [
"FallbackHeaders"
]
}
]
Vous pouvez remplacer les noms des en-têtes de la configuration en définissant les valeurs des paramètres suivants (mentionnées avec leurs valeurs par défaut) :
executionExceptionTypeHeaderName
(« Execution-Exception-Type »)executionExceptionMessageHeaderName
(« Execution-Exception-Message »)rootCauseExceptionTypeHeaderName
( » Root-Cause-Exception-Type »)rootCauseExceptionMessageHeaderName
(« Root-Cause-Exception-Message »)
JSONToGRPC
La JSONToGRPCFilter
fabrique convertit une charge utile JSON en requête gRPC.
Cette fabrique accepte le paramètre de configuration suivant :
protoDescriptor
: fichier de descripteur proto.
Vous pouvez générer ce fichier en utilisant protoc
et en spécifiant l’indicateur --descriptor_set_out
, comme illustré dans l’exemple suivant :
protoc --proto_path=src/main/resources/proto/ \
--descriptor_set_out=src/main/resources/proto/hello.pb \
src/main/resources/proto/hello.proto
Remarque
Le streaming
paramètre n’est pas pris en charge.
L’exemple suivant configure une JSONToGRPCFilter
fabrique à l’aide de la sortie à partir de protoc
:
[
{
"predicates": [
"Path=/json/**"
],
"filters": [
"JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
]
}
]
LocalResponseCache
La LocalResponseCache
fabrique remplace la configuration du cache de réponse local pour des itinéraires spécifiques lorsque le cache global est activé.
Cette fabrique accepte les paramètres de configuration suivants :
size
: taille maximale autorisée des entrées de cache pour cette route avant le début de l’éviction du cache (en Ko, Mo et Go).timeToLive
: durée de vie autorisée d’une entrée de cache avant expiration. Utilisez le suffixes
de durée pendant des secondes,m
pendant des minutes ouh
pendant des heures.
L’exemple suivant configure une LocalResponseCache
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"LocalResponseCache=3m,1MB"
]
}
]
MapRequestHeader
La MapRequestHeader
fabrique ajoute un en-tête à la requête en aval avec des valeurs mises à jour à partir de l’en-tête de la requête HTTP entrante.
Cette fabrique accepte les paramètres de configuration suivants :
fromHeader
toHeader
Cette fabrique crée un en-tête nommé (toHeader
) et la valeur est extraite d’un en-tête nommé existant (fromHeader
) à partir de la requête HTTP entrante. Si l’en-tête d’entrée n’existe pas, le filtre n’a aucun effet. Si le nouvel en-tête nommé existe déjà, ses valeurs sont augmentées avec les nouvelles valeurs.
L’exemple suivant configure une MapRequestHeader
fabrique qui ajoute l’en-tête X-Request-Red:<values>
à la requête en aval avec des valeurs mises à jour à partir de l’en-tête de Blue
la requête HTTP entrante :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"MapRequestHeader=Blue, X-Request-Red"
]
}
]
PrefixPath
La PrefixPath
fabrique ajoute un préfixe au chemin d’accès de toutes les requêtes.
Cette fabrique accepte le paramètre de configuration suivant :
prefix
L’exemple suivant configure une PrefixPath
fabrique qui ajoute le préfixe /api
au chemin d’accès de toutes les requêtes, afin qu’une demande soit /catalog
envoyée à /api/catalog
:
[
{
"predicates": [
"Path=/catalog/**"
],
"filters": [
"PrefixPath=/api"
]
}
]
PreserveHostHeader
La PreserveHostHeader
fabrique définit un attribut de requête que le filtre de routage inspecte pour déterminer s’il faut envoyer l’en-tête d’hôte d’origine ou l’en-tête hôte déterminé par le client HTTP.
Il n’existe aucun paramètre pour cette fabrique.
L’exemple suivant configure une PreserveHostHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"PreserveHostHeader"
]
}
]
RedirectTo
La RedirectTo
fabrique ajoute une redirection à l’URL d’origine.
Cette fabrique accepte les paramètres de configuration suivants :
status
: une série 300 redirige le code HTTP, tel que301
.url
: valeur de l’en-têteLocation
. Doit être un URI valide. Pour les redirections relatives, vous devez utiliseruri: no://op
l’URI de votre définition de route.
L’exemple suivant configure une fabrique qui envoie un RedirectTo
état 302
avec un Location:https://acme.org
en-tête pour effectuer une redirection :
[
{
"uri": "https://example.org",
"filters": [
"RedirectTo=302, https://acme.org"
]
}
]
RemoveJsonAttributesResponseBody
La RemoveJsonAttributesResponseBody
fabrique supprime les attributs JSON et leurs valeurs des corps de réponse JSON.
Cette fabrique accepte les paramètres de configuration suivants :
attribute names
: liste séparée par des virgules des noms d’attributs à supprimer d’une réponse JSON.delete recursively
(facultatif, booléen) : configuration qui supprime les attributs uniquement au niveau racine (false
) ou récursivement (true
). La valeur par défaut estfalse
.
L’exemple suivant configure une RemoveJsonAttributesResponseBody
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveJsonAttributesResponseBody=origin,foo,true"
]
}
]
RemoveRequestHeader
La RemoveRequestHeader
fabrique supprime un en-tête de la requête en aval.
Cette fabrique accepte le paramètre de configuration suivant :
name
: nom de l’en-tête à supprimer.
La liste suivante configure une RemoveRequestHeader
fabrique qui supprime l’en-tête X-Request-Foo
avant son envoi en aval :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestHeader=X-Request-Foo"
]
}
]
RemoveRequestParameter
La RemoveRequestParameter
fabrique supprime un paramètre avant son envoi en aval.
Cette fabrique accepte le paramètre de configuration suivant :
name
: nom du paramètre de requête à supprimer.
L’exemple suivant configure une RemoveRequestParameter
fabrique qui supprime le red
paramètre avant son envoi en aval :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveRequestParameter=red"
]
}
]
RemoveResponseHeader
La RemoveResponseHeader
fabrique supprime un en-tête de la réponse avant son retour au client de passerelle.
Cette fabrique accepte le paramètre de configuration suivant :
name
: nom de l’en-tête à supprimer.
La liste suivante configure une RemoveResponseHeader
fabrique qui supprime l’en-tête X-Response-Foo
de la réponse avant son retour au client de passerelle :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RemoveResponseHeader=X-Response-Foo"
]
}
]
RequestHeaderSize
La RequestHeaderSize
fabrique détermine la taille de l’en-tête de requête.
Cette fabrique accepte les paramètres de configuration suivants :
maxSize
: taille maximale des données autorisée par l’en-tête de requête, y compris la clé et la valeur.errorHeaderName
: nom de l’en-tête de réponse contenant un message d’erreur. Par défaut, le nom de l’en-tête de réponse esterrorMessage
.
La liste suivante configure une fabrique qui envoie un RequestHeaderSize
état 431
si la taille d’un en-tête de requête est supérieure à 1 000 octets :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RequestHeaderSize=1000B"
]
}
]
RewriteLocationResponseHeader
La RewriteLocationResponseHeader
fabrique modifie la valeur de l’en-tête Location
de réponse, généralement pour se débarrasser des détails spécifiques au back-end.
Cette fabrique accepte les paramètres de configuration suivants :
stripVersionMode
: ce paramètre a les valeurs possibles suivantes :NEVER_STRIP
,AS_IN_REQUEST
etALWAYS_STRIP
. La valeur par défaut estAS_IN_REQUEST
.NEVER_STRIP
: la version n’est pas supprimée, même si le chemin de requête d’origine ne contient aucune version.AS_IN_REQUEST
: la version est supprimée uniquement si le chemin de requête d’origine ne contient aucune version.ALWAYS_STRIP
: la version est toujours supprimée, même si le chemin de requête d’origine contient la version.
hostValue
: ce paramètre est utilisé pour remplacer lahost:port
partie de l’en-tête de réponseLocation
lorsqu’il est fourni. S’il n’est pas fourni, la valeur de l’en-têteHost
de demande est utilisée.protocolsRegex
: expression régulièreString
valide, par rapport à laquelle le nom du protocole est mis en correspondance. S’il n’est pas mis en correspondance, le filtre ne fonctionne pas. La valeur par défaut esthttp|https|ftp|ftps
.locationHeaderName
La liste suivante configure une RewriteLocationResponseHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
]
}
]
Dans cet exemple, pour une valeur de demande de POST
api.example.com/some/object/name
, la Location
valeur d’en-tête de réponse est object-service.prod.example.net/v2/some/object/id
réécrite en tant que api.example.com/some/object/id
.
RewritePath
La RewritePath
fabrique utilise des expressions régulières Java pour un moyen flexible de réécrire le chemin de la requête.
Cette fabrique accepte les paramètres de configuration suivants :
regexp
replacement
La liste suivante configure une RewritePath
fabrique :
[
{
"predicates": [
"Path=/red/**"
],
"filters": [
"RewritePath=/red/?(?<segment>.*), /$\\{segment}"
]
}
]
Dans cet exemple, pour un chemin de requête de /red/blue
, cette configuration définit le chemin d’accès /blue
avant d’effectuer la requête en aval.
RewriteResponseHeader
La RewriteResponseHeader
fabrique utilise des expressions régulières Java pour un moyen flexible de réécrire la valeur d’en-tête de réponse.
Cette fabrique accepte les paramètres de configuration suivants :
name
regexp
replacement
L’exemple suivant configure une RewriteResponseHeader
fabrique :
[
{
"predicates": [
"Path=/red/**"
],
"filters": [
"RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
]
}
]
Dans cet exemple, pour une valeur d’en-tête de /42?user=ford&password=omg!what&flag=true
, la configuration est définie /42?user=ford&password=***&flag=true
après avoir effectué la requête en aval.
SetPath
La SetPath
fabrique offre un moyen simple de manipuler le chemin de requête en autorisant les segments modinés du chemin d’accès. Ce filtre utilise les modèles d’URI de Spring Framework et autorise plusieurs segments correspondants.
Cette fabrique accepte le paramètre de configuration suivant :
template
L’exemple suivant configure une SetPath
fabrique :
[
{
"predicates": [
"Path=/red/{segment}"
],
"filters": [
"SetPath=/{segment}"
]
}
]
Dans cet exemple, pour un chemin de requête de /red/blue
, cette configuration définit le chemin d’accès /blue
avant d’effectuer la requête en aval.
SetRequestHeader
La SetRequestHeader
fabrique remplace (au lieu d’ajouter) tous les en-têtes par le nom donné.
Cette fabrique accepte les paramètres de configuration suivants :
name
value
La liste suivante configure une SetRequestHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"SetRequestHeader=X-Request-Red, Blue"
]
}
]
Dans cet exemple, le serveur en aval a répondu par X-Request-Red:1234
, et il est remplacé par X-Request-Red:Blue
.
La SetRequestHeader
fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.
L’exemple suivant configure une SetRequestHeader
fabrique qui utilise une variable :
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"SetRequestHeader=foo, bar-{segment}"
]
}
]
SetResponseHeader
La SetResponseHeader
fabrique remplace (au lieu d’ajouter) tous les en-têtes par le nom donné.
Cette fabrique accepte les paramètres de configuration suivants :
name
value
La liste suivante configure une SetResponseHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"SetResponseHeader=X-Response-Red, Blue"
]
}
]
Dans cet exemple, le serveur en aval a répondu par X-Response-Red:1234
, et il est remplacé par X-Response-Red:Blue
.
La SetResponseHeader
fabrique a accès aux variables d’URI utilisées pour faire correspondre un chemin ou un hôte. Vous pouvez utiliser des variables d’URI dans la valeur et les variables sont développées au moment de l’exécution.
L’exemple suivant configure une SetResponseHeader
fabrique qui utilise une variable :
[
{
"predicates": [
"Path=/api/{segment}"
],
"filters": [
"SetResponseHeader=foo, bar-{segment}"
]
}
]
SetStatus
La SetStatus
fabrique configure l’état de réponse de la demande de serveur.
Cette fabrique accepte le paramètre de configuration suivant :
status
: valeur SpringHttpStatus
valide, qui peut être une valeur entière telle que404
, ou la représentation sous forme de chaîne de l’énumération, telle queNOT_FOUND
.
La liste suivante configure une SetStatus
fabrique :
[
{
"predicates": [
"Path=/experimental/**"
],
"filters": [
"SetStatus=UNAUTHORIZED"
]
},
{
"predicates": [
"Path=/unknown/**"
],
"filters": [
"SetStatus=401"
]
}
]
StripPrefix
La StripPrefix
fabrique supprime le préfixe de la requête avant de l’envoyer en aval.
Cette fabrique accepte le paramètre de configuration suivant :
parts
: nombre de parties dans le chemin d’accès à supprimer de la requête avant de l’envoyer en aval. La valeur par défaut est 1.
L’exemple suivant configure une StripPrefix
fabrique :
[
{
"predicates": [
"Path=/name/**"
],
"filters": [
"StripPrefix=2"
]
}
]
Dans cet exemple, une requête est effectuée via la passerelle vers /name/blue/red
. La demande faite pour nameservice
apparaître en tant que nameservice/red
.
Réessayer
La Retry
fabrique détermine le nombre de nouvelles tentatives tentées.
Cette fabrique accepte les paramètres de configuration suivants :
retries
: nombre de nouvelles tentatives qui doivent être tentées.statuses
: codes d’état HTTP qui doivent être retentés, représentés à l’aideorg.springframework.http.HttpStatus
de .methods
: méthodes HTTP qui doivent être retentées, représentées à l’aideorg.springframework.http.HttpMethod
de .series
: série de codes d’état à retener, représentée à l’aideorg.springframework.http.HttpStatus.Series
de .exceptions
: liste des exceptions levées qui doivent être retentées.backoff
: interruption exponentielle configurée pour les nouvelles tentatives. Les nouvelles tentatives sont effectuées après un intervalle d’interruption defirstBackoff * (factor ^ n)
, oùn
est l’itération. SimaxBackoff
elle est configurée, l’interruption maximale appliquée est limitée àmaxBackoff
. SibasedOnPreviousValue
la valeur est true, labackoff
valeur est calculée à l’aideprevBackoff * factor
de .
Les valeurs par défaut suivantes sont configurées pour le Retry
filtre, lorsqu’elles sont activées :
retries
: trois fois.series
: série 5XX.methods
: méthode GET.exceptions
:IOException
etTimeoutException
.backoff
:Handicapés.
L’exemple suivant configure une Retry
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
]
}
]
RequestSize
La RequestSize
fabrique peut restreindre une demande d’atteindre le service en aval lorsque la taille de la demande est supérieure à la limite autorisée.
Cette fabrique accepte le paramètre de configuration suivant :
maxSize
: typeDataSize
où les valeurs sont définies comme un nombre suivi d’un suffixe facultatifDataUnit
tel queKB
ouMB
. La valeur de suffixe par défaut estB
pour les octets. Il s’agit de la limite de taille autorisée de la requête définie en octets.
L’exemple suivant configure une RequestSize
fabrique :
[
{
"predicates": [
"Path=/upload"
],
"filters": [
"RequestSize=5000000"
]
}
]
Dans cet exemple, lorsque la requête est rejetée en raison de la taille, la RequestSize
fabrique définit l’état 413 Payload Too Large
de la réponse avec un autre en-tête errorMessage
.
L’exemple suivant montre un errorMessage
:
errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB
TokenRelay
La TokenRelay
fabrique transfère un jeton d’accès OAuth2
aux ressources en aval. Ce filtre est configuré comme valeur boolean
dans la définition d’itinéraire plutôt qu’un filtre explicite.
L’exemple suivant configure une TokenRelay
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"tokenRelay": true
}
]
Utilisez des filtres commerciaux
Spring Cloud Gateway pour Kubernetes fournit également de nombreuses fabriques personnalisées GatewayFilter
. Les sections suivantes décrivent ces usines.
AllowedRequestCookieCount
La AllowedRequestCookieCount
fabrique détermine si une demande correspondante est autorisée à continuer en fonction du nombre de cookies.
Cette fabrique accepte le paramètre de configuration suivant :
amount
: nombre de cookies autorisés.
L’exemple suivant configure une AllowedRequestCookieCount
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestCookieCount=2"
]
}
]
AllowedRequestHeadersCount
La AllowedRequestHeadersCount
fabrique détermine si une demande correspondante est autorisée à continuer en fonction du nombre d’en-têtes.
Cette fabrique accepte le paramètre de configuration suivant :
amount
: nombre d’en-têtes autorisés.
L’exemple suivant configure une AllowedRequestHeadersCount
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestHeadersCount=4"
]
}
]
AllowedRequestQueryParamsCount
La AllowedRequestQueryParamsCount
fabrique détermine si une demande correspondante est autorisée à continuer en fonction des paramètres de requête nombre.
Cette fabrique accepte le paramètre de configuration suivant :
amount
: nombre de paramètres autorisés.
L’exemple suivant configure une AllowedRequestQueryParamsCount
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"AllowedRequestQueryParamsCount=3"
]
}
]
BasicAuth
La BasicAuth
fabrique ajoute un BasicAuth
Authorization
en-tête aux requêtes.
Il n’existe aucun paramètre pour cette fabrique.
L’exemple suivant configure une BasicAuth
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"BasicAuth"
]
}
]
ClaimHeader
La ClaimHeader
fabrique copie les données d’une revendication JWT dans un en-tête HTTP.
Cette fabrique accepte les paramètres de configuration suivants :
Claim name
: nom sensible à la casse de la revendication à passer.Header name
: nom de l’en-tête HTTP.
L’exemple suivant configure une ClaimHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"ClaimHeader=sub,X-Claim-Sub"
]
}
]
ClientCertificateHeader
La ClientCertificateHeader
fabrique valide le certificat d’en-tête X-Forwarded-Client-Cert
.
Cette fabrique accepte les paramètres de configuration suivants :
domain pattern
X-Forwarded-Client-Cert
: valeur en fonction de la capacité de Kubernetes à reconnaître l’autorité de certification du certificat client.certificate fingerprint
(facultatif) : empreinte digitale du certificat TLS/SSL.
L’exemple suivant configure une ClientCertificateHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
]
}
]
Cors
La Cors
fabrique active les validations CORS sur un itinéraire.
Cette fabrique accepte les paramètres de configuration suivants qui sont organisés en tant que paires clé-valeur pour les options CORS :
allowedOrigins
allowedMethods
allowedHeaders
maxAge
allowCredentials
allowedOriginPatterns
L’exemple suivant configure une Cors
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
]
}
]
JsonToXml
La fabrique transforme le JsonToXml
corps de la réponse JSON en corps de réponse XML.
Cette fabrique accepte le paramètre de configuration suivant :
wrapper
: nom de balise racine de la réponse XML si une autre balise racine est requise pour générer du code XML valide. La valeur par défaut estresponse
.
L’exemple suivant configure une JsonToXml
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"JsonToXml=custom-response"
]
}
]
RateLimit
La RateLimit
fabrique détermine si une demande correspondante est autorisée à continuer en fonction du volume de la demande.
Cette fabrique accepte les paramètres de configuration suivants :
request limit
: nombre maximal de demandes acceptées pendant la fenêtre.window duration
: durée de la fenêtre en millisecondes. Vous pouvez également utiliser less
m
suffixes ouh
les suffixes pour spécifier la durée en secondes, en minutes ou en heures.partition source
(facultatif) : emplacement de la clé de partition (claim
,header
ouIPs
).partition key
(facultatif) : valeur utilisée pour partitionner les compteurs de requête.
L’exemple suivant configure une RateLimit
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RateLimit=1,10s"
]
}
]
Les exemples suivants montrent d’autres RateLimit
configurations :
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
La RestrictRequestHeaders
fabrique détermine si une demande correspondante est autorisée à continuer en fonction des en-têtes.
S’il existe des en-têtes HTTP qui ne sont pas dans la configuration sans respect headerList
de la casse, une réponse 431 Forbidden error
est retournée au client.
Cette fabrique accepte le paramètre de configuration suivant :
headerList
: liste sans respect de la casse des noms d’en-têtes autorisés.
L’exemple suivant configure une RestrictRequestHeaders
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RestrictRequestHeaders=Content-Type,x-request-temp"
]
}
]
RewriteAllResponseHeaders
La RewriteAllResponseHeaders
fabrique réécrit plusieurs en-têtes de réponse à la fois.
Cette fabrique accepte les paramètres de configuration suivants :
pattern to match
: expression régulière à mettre en correspondance avec les valeurs d’en-tête.replacement
: valeur de remplacement.
L’exemple suivant configure une RewriteAllResponseHeaders
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteAllResponseHeaders=\\d,0"
]
}
]
RewriteResponseBody
La RewriteResponseBody
fabrique modifie le corps d’une réponse.
Cette fabrique accepte les paramètres de configuration suivants qui sont organisés sous forme de liste séparées par des virgules de paires clé-valeur, où chaque paire accepte le formulaire pattern to match:replacement
:
pattern to match
: expression régulière à mettre en correspondance avec le texte dans le corps de la réponse.replacement
: valeur de remplacement.
L’exemple suivant configure une RewriteResponseBody
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteResponseBody=foo:bar,/path-one/:/path-two/"
]
}
]
RewriteJsonAttributesResponseBody
La RewriteJsonAttributesResponseBody
fabrique réécrit les attributs JSON à l’aide JSONPath
de la notation.
Cette fabrique accepte les paramètres de configuration suivants qui sont organisés sous forme de liste séparées par des virgules de paires clé-valeur, où chaque paire accepte le formulaire jsonpath:replacement
:
jsonpath
JSONPath
: expression à mettre en correspondance avec le corps de la réponse.replacement
: valeur de remplacement.
L’exemple suivant configure une RewriteJsonAttributesResponseBody
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
]
}
]
Rôles
La Roles
fabrique autorise les requêtes qui contiennent l’un des rôles configurés.
Cette fabrique accepte le paramètre de configuration suivant :
roles
: liste séparée par des virgules des rôles autorisés.
L’exemple suivant configure une Roles
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Roles=role_01,role_02"
]
}
]
Étendues
La Scopes
fabrique autorise les requêtes qui contiennent l’une des étendues configurées OAuth
.
Cette fabrique accepte le paramètre de configuration suivant :
scopes
: liste séparée par des virgules des étendues autoriséesOAuth
.
L’exemple suivant configure une Scopes
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"Scopes=api.read,api.write,user"
]
}
]
StoreIpAddress
La StoreIPAddress
fabrique est utilisée uniquement pour le développement d’extensions et dans le contexte de l’application.
Cette fabrique accepte le paramètre de configuration suivant :
attribute name
: nom utilisé pour stocker l’adresse IP en tant qu’attribut d’échange.
L’exemple suivant configure une StoreIPAddress
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"StoreIpAddress=ip"
]
}
]
Connexion de l’authentification unique
La SSO login
fabrique redirige vers l’authentification s’il n’existe aucun jeton d’autorisation valide. Cette fabrique est configurée comme valeur boolean
dans la définition de route plutôt qu’un filtre explicite.
L’exemple suivant configure une SSO login
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"ssoEnabled": true
}
]
StoreHeader
La StoreHeader
fabrique stocke une valeur d’en-tête dans le contexte de l’application. Ce filtre est utilisé uniquement pour le développement d’extensions.
Cette fabrique accepte les paramètres de configuration suivants :
headers
: liste d’en-têtes à case activée. Le premier trouvé est utilisé.attribute name
: nom utilisé pour stocker la valeur d’en-tête en tant qu’attribut d’échange.
L’exemple suivant configure une StoreHeader
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
]
}
]
XmlToJson
La fabrique transforme le XmlToJson
corps de la réponse XML en corps de réponse JSON.
Il n’existe aucun paramètre pour cette fabrique.
L’exemple suivant configure une XmlToJson
fabrique :
[
{
"predicates": [
"Path=/api/**"
],
"filters": [
"XmlToJson"
]
}
]