Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 9128|Répondre: 0

[Source] Usines de filtres intégrées à Spring Cloud Gateway

[Copié le lien]
Publié sur 07/02/2022 13:36:49 | | |
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 :


Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
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)




Précédent:Les journaux Docker remplissent les disques et la migration des données
Prochain:Les instructions SQL hybridées dynamiquement en Java empêchent l’injection de bases de données
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com