Sécurité, limitation de courant : filtrez les informations illégales au niveau de la couche passerelle
passerelle externe nginx, passerelle intranet
nginx peut être amélioré avec Lua ou Kong
concept
identifiant : n'importe quel nom
uri : l'adresse du service proxy. id et uri sont obligatoires, le prédicat et le filtre sont facultatifs
Prédicat : peut être utilisé pour faire correspondre l'URI pour accéder à la passerelle. S'il correspond, l'itinéraire actuel prendra effet.
Filtre : une instance de GatewayFilter, ajoutant une logique avant ou après le proxy, avec la plus grande flexibilité
Flux de traitement
Tout d'abord, Handler Mapping traite l'URL, puis la transmet à Web Handler. Une fois le traitement terminé, il appelle le service proxy réel. Une fois que le service proxy a répondu, il exécute la logique. de la seconde moitié du filtre. Renvoie le résultat à WebHandler, puis à HandlerMapping, et enfin au client.
Si les éléments de la liste ont plusieurs champs, vous avez besoin de "-" et de deux-points pour spécifier respectivement chaque champ et valeur ; s'il n'y a qu'un seul champ, vous pouvez utiliser des virgules pour le séparer.
Configuration du type d'objet, chaque champ peut être configuré via "-" et deux points
Type de carte : clé, valeur séparée par deux points
predicates:
- Path=/sendOrder
- Query=name,ma.
- name: Query
args:
param: id
regexp: d+
#predicates是List, 它的元素是
public class PredicateDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();}
等号分割转成对象的写法不是yml内置支持的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
prédicat
La configuration du prédicat est une Liste dont les éléments peuvent être des chaînes dans un format spécifique, ou des objets. Méthode d'écriture de chaîne : divisée par le signe égal, la première partie est le nom du prédicat, la deuxième partie args est séparée par des virgules, la valeur est enregistrée dans la valeur Map et la clé Map est automatiquement générée. Méthode d'écriture d'objet : PredicateDefinition
S'il y a des virgules et des deux-points dans les arguments eux-mêmes, le format de chaîne ne peut pas être utilisé
La méthode shortType définit la méthode d'analyse des paramètres args sur ConfigClass : raccourciFieldOrder supprime le préfixe raccourciFieldPrefix et correspond au nom du champ ConfigClass. La valeur du paramètre args correspond à la valeur du champ de ConfigClass : liste séparée par des virgules ; : Liste séparée par des virgules, mais la dernière La valeur est une valeur booléenne, qui est finalement convertie en une Carte de 2 clés La valeur de la première clé est la Liste devant la valeur booléenne, et la deuxième clé est la. Valeur booléenne.
Utilisé pour faire correspondre les demandes d'accès à la passerelle (telles que l'URI, les paramètres de requête, les en-têtes de requête). En cas de correspondance, l'itinéraire actuel prendra effet.
Correspondant à l'implémentation de GatewayPredicate, la classe d'implémentation est créée par la fabrique. La classe d'implémentation de RoutePredicateFactory. La spécification de dénomination de la classe d'implémentation est : nom du prédicat + RoutePredicateFactory.
Le nom du prédicat correspond au préfixe du nom de classe de la classe d'implémentation de la fabrique, et le paramètre de prédicat args correspond à la classe ConfigClass de la fabrique.
Plusieurs prédicats sontetRelation
Lorsque le prédicat ne passe pas, la passerelle renvoie 404
Chemin
Faites correspondre les chemins, prenez en charge la correspondance des fourmis et extrayez les uriVariables via {}
Requête
Existe-t-il un nom de paramètre de requête http correspondant ? La valeur peut être régulière.
le nom est une requête fixe, args a 2 valeurs, param et regexp, correspondant au nom et à la valeur du paramètre de requête
Lorsque seul le nom est configuré, cela signifie que tant que le paramètre de requête existe, il sera transmis.
Entête
En-têteRoutePredicateFactory
Faites correspondre le nom et la valeur de l'en-tête de la demande. Vous ne pouvez faire correspondre que le nom. La valeur réelle de l'en-tête de la demande peut être multiple. Tant qu'il y a une correspondance, la valeur de configuration prend en charge les expressions régulières.
Méthode
Correspond à la méthode de requête HTTP, la configuration doit être en lettres majuscules et séparée par des virgules.
Adresse distante
L'IP du client correspondant à la requête, pour être précis, l'IP du dernier proxy réseau, peut être multiple, séparée par des virgules
Hôte
Correspond à la valeur de la partie hôte dans l'en-tête de la requête Host (à l'exclusion du port). Elle peut être multiple, séparée par des virgules et correspondre par fourmi.
Utilisez AntPathMatcher pour faire la correspondance et le séparateur de chemin est "."
Biscuit
Faites correspondre le nom et la valeur du cookie. La valeur peut être mise en correspondance régulièrement.
Poids
Utilisé pour l'équilibrage de charge de différents itinéraires. Les itinéraires du même groupe sont chargés en fonction du poids.
Vous pouvez configurer 2 valeurs, séparées par des virgules, qui sont le regroupement et le poids.
WeightCalculatorWebFilter : une fois démarré, une carte à deux couches est générée en fonction de la configuration de poids. La première couche est le nom du groupe et la deuxième couche est l'ID de routage. Lorsque la demande arrive, un nombre aléatoire de 0 à 1 est généré. et un ID de routage est sélectionné pour chaque groupe.
WeightRoutePredicateFactory : lors du filtrage de prédicat, filtre en fonction du groupe et de l'ID de route
filtre
La méthode d'écriture de la configuration est la même que celle du prédicat. La méthode d'écriture de la chaîne : divisée par le signe égal. La première partie correspond au préfixe du nom de classe GatewayFilterFactory de la fabrique de filtres, et la deuxième partie est le paramètre.
Les filtres sont utilisés pour modifier les demandes et les réponses
Ajouter un en-tête de demande
Ajouter des en-têtes de requête, qui peuvent être obtenus par le backend
La valeur de l'en-tête de requête prend en charge l'acquisition dynamique à partir d'uriVariables
Préfixe de bande
Il n'y a qu'une seule valeur entière n. Après avoir divisé le chemin demandé par "/", supprimez le préfixe n.
Limiter
Interdomaine
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
Le serveur détermine s'il s'agit d'une requête inter-domaine en fonction du fait que l'origine de l'en-tête de la requête et le schéma, l'hôte et le port de l'URL de la requête sont identiques. Tant qu'il y a une différence, il s'agit d'une requête inter-domaine.
Il doit y avoir une configuration inter-domaine et l'uri demandé correspond à l'uriPattern de la configuration inter-domaine. La passerelle déterminera si elle est inter-domaine. Si elle est inter-domaine, elle autorisera les en-têtes de requête inter-domaines. sources, méthodes de requête et requêtes réelles dans la configuration inter-domaines. Si l'en-tête de requête, la source et la méthode de requête correspondent, s'ils correspondent tous, exécutez un accès inter-domaine, sinon renvoie 403Forbiden.
Prend en charge l'obtention de l'ID de service via la découverte de services et génère automatiquement une configuration de routage basée sur l'ID de service.L'URI de la configuration de routage par défaut est lb://serviceId, le prédicat est /serviceId/** et le filtre est Rewritepath pour supprimer serviceId.
filtre global
Filtre client d'équilibrage de charge réactive
Pour traiter l'URI de routage avec le schéma lb, obtenez d'abord l'instance de service en fonction du nom du service via ServiceInstanceListSupplier, puis équilibrez la charge via l'instance ReactorLoadBalancer.
RouteToRequestUrlFilter
Faites 2 choses : 1. Prenez en charge les schémas à 2 couches, enregistrez le schéma externe dans GATEWAY_SCHEME_PREFIX_ATTR, puis supprimez-le. 2. Utilisez le schéma interne, l'hôte et le port pour remplacer l'URI réellement demandé afin d'effectuer le transfert.