Usine de filtres intégrée
Voici un tableau simple de toutes les usines de filtres intégrées dans Spring Cloud Gateway, qui n’est pas très détaillé, mais peut servir d’aperçu rapide. Comme suit:
Usine de filtres | fonction | paramètre | AddRequestHeader | Ajouter un en-tête à la requête originale | Nom et valeur de l’en-tête | Paramètre AddRequestRequest | Ajouter des paramètres de requête à la requête originale | Nom et valeur du paramètre | AddResponseHeader | Ajoutez un en-tête à la réponse originale | Nom et valeur de l’en-tête | DedupeResponseHeader | Rejette les valeurs dupliquées dans l’en-tête de réponse | Le nom de l’en-tête et la stratégie de déduplication à dédupliquer | Hystrix | Introduisez la protection contre disjoncteurs Hystrix pour la ligne | Le nom de HystrixCommand | En-têtes de rechange | Ajoutez des informations d’exception spécifiques à l’en-tête de requête de l’Uuri de secours | Nom de l’en-tête | PrefixPath | Ajouter un préfixe au chemin de requête original | Chemin du préfixe | PréserveHostHeader | Ajoutez une propriété preserveHostHeader=true à la requête, que le filtre de routage vérifie pour décider si vous souhaitez envoyer l’hôte original | non | RequestRateLimiter | Utilisé pour limiter les requêtes, l’algorithme de limitation est un compartiment de jetons | keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus | RedirigerVers | Redirigez la requête originale vers l’URL spécifiée | Code d’état HTTP et URL de redirection | RemoveHopByHopHeadersFilter | Supprimez une série d’en-têtes prescrits par l’organisation IETF pour la demande initiale | Cela est activé par défaut, et vous pouvez spécifier quels en-têtes supprimer uniquement via la configuration | RemoveRequestHeader | Supprimer un en-tête pour la requête originale | Nom de l’en-tête | RemoveResponseHeader | Supprimez un en-tête pour la réponse originale | Nom de l’en-tête | RewritePath | Réécrire le chemin de requête original | Le régex du chemin original et le régex du chemin réécrit | RewriteResponseHeader | Réécrire un en-tête dans la réponse originale | Nom de l’en-tête, expression régulière de la valeur, valeur réécrite | SaveSession | Appliquer l’opération WebSession ::save avant de transférer la requête | non | secureHeaders | Ajoutez une série d’en-têtes de réponse qui servent de sécurité à la réponse originale | Aucun, vous pouvez modifier les valeurs de ces en-têtes de réponse de sécurité | SetPath | Modifier le chemin de requête original | Chemin modifié | SetResponseHeader | Modifier la valeur d’un en-tête dans la réponse originale | Nom de l’en-tête, la valeur modifiée | SetStatus | Modifier le code d’état de la réponse originale | Codes d’état HTTP, qui peuvent être des chiffres ou des chaînes de caractères | Bande-préfixe | Utilisé pour tronquer le chemin de la requête originale | Utilisez des chiffres pour indiquer le nombre de chemins à tronquer | Réessayer | Essayez de voir différentes réponses | reprises、status、methods、series | RequestSize | Fixez la taille du maximum de paquets demandés autorisés à être reçus. Si la taille du package de requête dépasse la valeur définie, 413 Payload Too Large est retourné | La taille du package de requête est en octets et la valeur par défaut est de 5M | ModifyRequestBody | Modifiez le contenu original du corps de la demande avant de la transférer | Le contenu modifié du corps de la demande | ModificationResponseBody | Modifier le contenu du corps de la réponse original | Le contenu modifié du corps de réponse | Faire défaut | Ajouter des filtres pour toutes les routes | Nom et valeur de l’usine du filtre |
Conseils : Chaque usine de filtres correspond à une classe d’implémentation, et celles-ciLe nom de la classe doit se terminer par GatewayFilterFactoryC’est une convention de Spring Cloud Gateway, par exemple, la classe d’implémentation correspondant à AddRequestHeader est AddRequestHeaderGatewayFilterFactory. Les amis intéressés par le code source peuvent stalmer des noms de classes spécifiques selon cette règle pour trouver le code d’implémentation de ces usines de filtres intégrées.
1、AddRequestHeader GatewayFilter Factory
Ajoutez un en-tête à la requête originale, exemple de configuration :
Ajoutez un en-tête de requête nommé X-Request-Foo avec la valeur de Bar à la requête originale
2、AddRequestParameter GatewayFilter Factory
Ajouter des paramètres et des valeurs de requête à la requête originale, exemple de configuration :
Ajoutez un paramètre nommé foo avec une valeur de bar à la requête originale, c’est-à-dire : foo=bar
3、AddResponseHeader GatewayFilter Factory
Ajoutez un en-tête à la réponse originale, exemple de configuration :
Ajoutez un en-tête de réponse nommé X-Request-Foo avec une valeur Bar à la réponse originale
4、DedupeResponseHeader GatewayFilter Factory
DedupeResponseHeader peut supprimer les valeurs dupliquées dans les en-têtes de réponse en fonction du nom d’en-tête configuré et de la politique de déduplication, qui est une nouvelle fonctionnalité fournie par Spring Cloud Greenwich SR2 et ne peut pas être utilisée sous cette version.
NousSi l’en-tête CORS (Solving Cross-Domain) est défini à la fois sur la passerelle et sur le microservice, si aucune configuration n’est effectuée, alors la valeur de l’en-tête CORS obtenue en demandant le microservice -> passerelle ->, ce sera ainsi :
Vous pouvez voir que les valeurs de ces deux en-têtes sont dupliquées, si vous souhaitez dédupliquer les valeurs de ces deux en-têtes, vous devez utiliser DedupeResponseHeader, exemple de configuration :
Stratégie de déduplication :
- RETAIN_FIRST : Par défaut, conservez la première valeur
- RETAIN_LAST : Conservez la dernière valeur
- RETAIN_UNIQUE : Garder toutes les valeurs uniques dans l’ordre dans lequel elles sont apparues pour la première fois
Si vous souhaitez avoir une compréhension plus complète de la factory de filtres, il est recommandé de lire le code source de la factory de filtres, car le code source contient des notes détaillées et des exemples, ce qui est mieux que la documentation officielle : org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory
5、Hystrix GatewayFilter Factory
Voici la protection contre les disjoncteurs Hystrix pour les itinéraires, exemple de configuration :
Hystrix est la première génération de composants tolérants aux pannes de Spring Cloud, mais il est entré en mode maintenance, et Hystrix sera retiré par Spring Cloud à l’avenir, remplacé par Alibaba Sentinel/Resilience4J. Cet article n’entrera donc pas dans les détails, si cela vous intéresse, vous pouvez vous référer à la documentation officielle : Hystrix GatewayFilter Factory
6、FallbackHeaders GatewayFilter Factory
Prenant également en charge Hystrix, l’usine de filtres décrite dans la section précédente prend en charge un paramètre de configuration : fallbackUri, utilisé pour transférer les requêtes vers une URI spécifique lorsqu’une exception survient. L’usine de filtres FallbackHeaders peut ajouter un en-tête lors du transfert d’une requête vers l’URI, et la valeur de cet en-tête correspond à l’information spécifique de l’exception. Exemple de configuration :
Je ne vais pas entrer dans les détails ici, si cela vous intéresse, vous pouvez vous référer à la documentation officielle : FallbackHeaders GatewayFilter Factory
7、PrefixPath GatewayFilter Factory
Ajouter un chemin de préfixe au chemin de requête original, exemple de configuration :
Cette configuration fait que la visite à ${GATEWAY_URL}/hello est transférée vershttps://example.org/mypath/hello
8、PreserveHostHeader GatewayFilter Factory
Ajoutez une propriété preserveHostHeader=true à la requête, que le filtre de routage vérifie pour décider s’il faut envoyer l’En-tête hôte original. Exemple de configuration :
Si ce n’est pas défini, alors l’en-tête nommé Host sera contrôlé par le client Http
9、RequestRateLimiter GatewayFilter Factory
Il est utilisé pour limiter les requêtes, et l’algorithme de limitation est un bucket de jetons. Exemple de configuration :
10、RedirectVers GatewayFilter Factory
Redirigez la requête originale vers l’URL spécifiée, exemple de configuration :
Cette configuration redirige l’accès à ${GATEWAY_URL}/hello vers https://acme.org/hello , et en porter unLocation:http://acme.orgHeader, tandis que le code d’état HTTP qui renvoie le client est 302
Notes:
Le code d’état HTTP doit être 3xx, par exemple 301
L’URL doit être une URL légitime qui sert de valeur à l’en-tête de localisation
11、RemoveHopByHopHeadersFilter GatewayFilter Factory
Pour la demande originale de suppression d’une série d’en-têtes spécifiée par l’organisation IETF, les en-têtes supprimés par défaut sont les suivants :
- Connexion
- Garder la vie
- Authentification par procuration
- Autorisation par procuration
- TE
- Remorque
- Encodage par transfert
- Mise à niveau
Vous pouvez spécifier quels en-têtes ne sont supprimés que via la configuration, exemple de configuration :
12、RemoveRequestHeader GatewayFilter Factory
Pour supprimer un en-tête pour la requête originale, configurez un exemple :
Supprimez l’en-tête de requête nommé X-Request-Foo de la requête originale
13、RemoveResponseHeader GatewayFilter Factory
Pour retirer un en-tête pour la réponse originale, configurez un exemple :
Supprimez l’en-tête de réponse nommé X-Request-Foo de la réponse originale
14、RewritePath GatewayFilter Factory
Remplacer le chemin de requête original par une expression régulière, exemple de configuration :
Cette configuration permet d’accéder à /foo/bar pour réécrire le chemin vers /bar et le rediriger, c’est-à-dire le rediriger vers https://example.org/bar。 Notez qu’en raison de la syntaxe YAML, il faut utiliser $\ au lieu de $
15、RewriteResponseHeader GatewayFilter Factory
Réécrivez un en-tête dans la réponse originale, exemple de configuration :
L’importance de cette configuration est que si la valeur de X-Response-Foo dans l’en-tête de réponse est /42 ?user=ford&password=omg !what&flag=true, alors elle sera réécrite en /42 ?user=ford&password=***&flag=true selon la valeur configurée, c’est-à-dire le mot de passe=omg !ce qui sera réécrit en mot de passe=***
16、SaveSession GatewayFilter Factory
Avant de transférer la requête, appliquez l’opération WebSession ::save, exemple de configuration :
Il est principalement utilisé pour le stockage différé des données (les données ne sont pas persistées immédiatement) comme Spring Session, et vise à s’assurer que l’état de la session est sauvegardé avant que la requête ne soit transférée. Si vous intégrez Spring Security, dans Spring Session, et souhaitez vous assurer que toutes les informations de sécurité sont transmises aux machines en aval, vous devez configurer ce filtre.
17、secureHeaders GatewayFilter Factory
L’usine de filtres secureHeaders repose principalement sur les recommandations de ce blog, ajoutant une série d’en-têtes de réponse qui jouent un rôle de sécurité dans la réponse originale. Par défaut, les en-têtes suivants (y compris les valeurs) sont ajoutés :
- X-Xss-Protection:1; mode=block
- Strict-Transport-Security:max-age=631138519
- X-Frame-Options:DENY
- X-Content-Type-Options:nosniff
- Referrer-Policy:no-referrer
- Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
- X-Download-Options:noopen
- X-Permitted-Cross-Domain-Policies:none
Si vous souhaitez modifier les valeurs de ces Headers, vous devez utiliser les suffixes correspondants de ces Headers, comme suit :
- En-tête de protection xss
- Sécurité stricte des transports
- Options de trame
- Options-type-contenu
- Politique de référence
- politique de sécurité du contenu
- Options de téléchargement
- Politiques inter-domaines autorisées
Exemple de configuration :
Si vous souhaitez désactiver certains en-têtes, vous pouvez utiliser la configuration suivante :
18、SetPath GatewayFilter Factory
Modifiez le chemin de requête original et configurez un exemple :
Cette configuration le fait rediriger vers ${GATEWAY_URL}/foo/bar lors de l’accèshttps://example.org/bar , c’est-à-dire que le /foo/bar original a été changé en /bar
19、SetResponseHeader GatewayFilter Factory
Modifiez la valeur d’un en-tête dans la réponse originale, configurez un exemple :
Modifier la valeur de X-Response-Foo dans la réponse originale à Bar
20、SetStatus GatewayFilter Factory
Modifier le code d’état de la réponse originale, exemple de configuration :
La valeur de SetStatusd peut être soit un nombre, soit une chaîne. Mais cela doit être la valeur dans la classe d’énumération Spring HttpStatus. Les deux configurations ci-dessus peuvent renvoyer le code d’état HTTP 401.
21、StripPrefix GatewayFilter Factory
Pour tronquer le chemin de la requête originale, exemple de configuration :
Comme montré dans la configuration ci-dessus, si le chemin demandé est /name/bar/foo, il sera tronqué en /foo et redirigé, c’est-à-dire que 2 chemins seront tronqués.
22、Retry GatewayFilter Factory
Essayez de répéter différentes réponses, par exemple pour les codes d’état HTTP, exemple de configuration :
Les paramètres suivants peuvent être configurés :
- Essais : Le nombre de tentatives
- statuses : Le code de statut qui doit être réessayé, défini dans org.springframework.http.HttpHttpStatus
- méthodes : La méthode de requête qui doit être réessayée, avec une valeur dans org.springframework.http.HttpHttpMethod
- série : Séquence de code d’état HTTP, avec une valeur dans org.springframework.http.Http.HttpStatus.Series
23、RequestSize GatewayFilter Factory
Définissez la taille maximale des paquets de requête autorisés à être reçus, exemple de configuration :
Si la taille du package de requête dépasse la valeur définie, une charge utile 413 trop grande est renvoyée avec un message d’erreur
24、Modification Request Body GatewayFilter Factory
Modifiez le contenu original du corps de la requête avant de transférer la requête, la factory de filtres ne peut être configurée que par code, pas dans le fichier de configuration. Exemple de code :
Conseils : Cette usine de filtres est en état BETA, et l’API pourrait évoluer à l’avenir.Veuillez utiliser l’environnement de production avec prudence
25、Modifier le corps de réponse GatewayFilter Factory
La factory de filtres peut également être utilisée pour modifier le contenu du corps de réponse original, et la factory de filtres ne peut être configurée que par code, pas dans le fichier de configuration. Exemple de code :
Conseils : Cette usine de filtres est en état BETA, l’API pourrait évoluer à l’avenir, veuillez l’utiliser avec prudence en environnement de production
26、Filtres par défaut
Les filtres par défaut servent à ajouter une usine de filtres à toutes les routes, c’est-à-dire pour passerL’usine de filtres configurée par le filtre par défaut s’appliquera à toutes les routes。 Exemple de configuration :
(Fin)
|