Sicherheit, Strombegrenzung: Filtern Sie illegale Informationen auf der Gateway-Ebene heraus
Externes Nginx-Gateway, Gateway-Intranet
Nginx kann mit Lua oder Kong erweitert werden
Konzept
ID: beliebiger Name
uri: Die Proxy-Dienstadresse. id und uri sind erforderlich, Prädikat und Filter sind optional
Prädikat: kann verwendet werden, um die URL für den Zugriff auf das Gateway abzugleichen. Bei Übereinstimmung wird die aktuelle Route wirksam.
Filter: Eine Instanz von GatewayFilter, die Logik vor oder nach dem Proxy hinzufügt und die höchste Flexibilität bietet
Verarbeitungsablauf
Zuerst verarbeitet Handler Mapping die URL und übergibt sie dann zur Verarbeitung. Nach Abschluss der Verarbeitung ruft es den eigentlichen Proxy-Dienst auf und führt die Logik aus der zweiten Hälfte des Filters Geben Sie das Ergebnis an WebHandler, dann an HandlerMapping und schließlich an den Client zurück
Wenn die Elemente in der Liste mehrere Felder haben, benötigen Sie „-“ und einen Doppelpunkt, um jedes Feld bzw. jeden Wert anzugeben; wenn es nur ein Feld gibt, können Sie es durch Kommas trennen.
Konfiguration des Objekttyps, jedes Feld kann durch „-“ und Doppelpunkt konfiguriert werden
Kartentyp: Schlüssel, durch Doppelpunkt getrennter Wert
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ädikat
Die Prädikatkonfiguration ist eine Liste, deren Elemente Zeichenfolgen in einem bestimmten Format oder Objekte sein können. Methode zum Schreiben von Zeichenfolgen: Durch Gleichheitszeichen getrennt, der erste Teil ist der Prädikatsname name, der zweite Teil args wird durch Kommas getrennt, der Wert wird im Map-Wert gespeichert und der Map-Schlüssel wird automatisch generiert. Objektschreibmethode: PredicateDefinition
Wenn die Argumente selbst Kommas und Doppelpunkte enthalten, kann das Zeichenfolgenformat nicht verwendet werden
Die shortType-Methode definiert die Parsing-Methode von args-Parametern für ConfigClass: shortFieldPrefix und entspricht dem ConfigClass-Feldnamen. Der Wert des args-Parameters entspricht dem Feldwert von ConfigClass; GATHER_LIST_TAIL_FLAG : durch Kommas getrennte Liste, aber der letzte Wert ist ein boolescher Wert, der schließlich in eine Karte mit 2 Schlüsseln umgewandelt wird. Der Wert des ersten Schlüssels ist die Liste vor dem booleschen Wert, und der zweite Schlüssel ist der Boolescher Wert.
Wird zum Abgleichen von Anforderungen für den Zugriff auf das Gateway verwendet (z. B. URI, Abfrageparameter, Anforderungsheader). Bei Übereinstimmung wird die aktuelle Route wirksam.
Entsprechend der Implementierung von GatewayPredicate wird die Implementierungsklasse von der Factory erstellt. Die Benennungsspezifikation der Implementierungsklasse lautet: Prädikatname + RoutePredicateFactory.
Der Prädikatsname entspricht dem Klassennamenpräfix der Factory-Implementierungsklasse und der Prädikatsparameter args entspricht der Factory-ConfigClass.
Mehrere Prädikate sindUndBeziehung
Wenn das Prädikat nicht bestanden wird, gibt das Gateway 404 zurück
Weg
Passen Sie Pfade an, unterstützen Sie Ant-Matching und extrahieren Sie uriVariables über {}
Abfrage
Gibt es einen entsprechenden HTTP-Anfrageparameternamen? Der Wert kann regulär sein.
Der Name ist eine feste Abfrage, args hat zwei Werte, param und regexp, entsprechend dem Namen und Wert des Abfrageparameters
Wenn nur der Name konfiguriert ist, bedeutet dies, dass der Anforderungsparameter übergeben wird, solange er vorhanden ist.
Header
HeaderRoutePredicateFactory
Passen Sie den Namen und den Wert des Anforderungsheaders an. Der tatsächliche Anforderungsheaderwert kann mehrere sein. Solange es eine Übereinstimmung gibt, unterstützt der Konfigurationswert reguläre Ausdrücke.
Methode
Entspricht der HTTP-Anfragemethode, die Konfiguration muss in Großbuchstaben erfolgen und durch Kommas getrennt sein.
Remote-Adresse
Die zur Anfrage passende Client-IP, genauer gesagt die IP des letzten Netzwerk-Proxys, kann mehrere, durch Kommas getrennte, sein
Gastgeber
Entspricht dem Wert des Host-Teils im Host-Anforderungsheader (mit Ausnahme des Ports). Es können mehrere Werte vorhanden sein, die durch Kommas getrennt sind und durch Ant abgeglichen werden können.
Verwenden Sie AntPathMatcher zum Abgleichen, und das Pfadtrennzeichen ist „.“
Plätzchen
Passen Sie den Namen und den Wert des Cookies an. Der Wert kann regelmäßig abgeglichen werden.
Gewicht
Wird zum Lastausgleich verschiedener Routen verwendet. Routen in derselben Gruppe werden entsprechend ihrem Gewicht geladen.
Sie können zwei durch Kommas getrennte Werte konfigurieren: Gruppierung und Gewichtung.
WeightCalculatorWebFilter: Beim Start wird eine zweischichtige Karte basierend auf der Gewichtskonfiguration generiert. Die erste Schicht ist der Gruppenname und die zweite Schicht ist die Routing-ID. Wenn die Anfrage eingeht, wird eine Zufallszahl von 0 bis 1 generiert. und für jede Gruppe wird eine Routing-ID ausgewählt.
WeightRoutePredicateFactory: Bei der Prädikatfilterung wird nach Gruppen- und Routen-ID gefiltert
Filter
Die Konfigurationsschreibmethode ist dieselbe wie die Zeichenfolgenschreibmethode: Aufteilung nach Gleichheitszeichen. Der erste Teil entspricht dem Präfix des GatewayFilterFactory-Klassennamens und der zweite Teil ist der Parameter.
Filter werden verwendet, um Anfragen und Antworten zu ändern
AddRequestHeader
Fügen Sie Anforderungsheader hinzu, die vom Backend abgerufen werden können
Der Wert des Anforderungsheaders unterstützt die dynamische Erfassung von uriVariables
StripPrefix
Es gibt nur einen ganzzahligen Wert n. Nachdem Sie den angeforderten Pfad durch „/“ dividiert haben, entfernen Sie das Präfix n
Begrenzend
Domainübergreifend
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
Der Server bestimmt, ob es sich um eine domänenübergreifende Anfrage handelt, indem er prüft, ob der Ursprung des Anfrageheaders und das Schema, der Host und der Port der Anfrage-URL identisch sind. Solange es einen Unterschied gibt, handelt es sich um eine domänenübergreifende Anfrage.
Es muss eine domänenübergreifende Konfiguration vorliegen und die angeforderte URL muss mit dem uriPattern der domänenübergreifenden Konfiguration übereinstimmen. Wenn es sich um eine domänenübergreifende Konfiguration handelt, werden domänenübergreifende Anforderungsheader zugelassen. Quellen, Anforderungsmethoden und tatsächliche Anforderungen in der domänenübergreifenden Konfiguration. Ob der Anforderungsheader, die Quelle und die Anforderungsmethode übereinstimmen. Wenn alle übereinstimmen, führen Sie den domänenübergreifenden Zugriff aus, andernfalls wird 403Forbiden zurückgegeben
Unterstützt das Abrufen der Service-ID durch Service-Erkennung und generiert automatisch eine Routing-Konfiguration basierend auf der Service-ID.Die URL der Standard-Routing-Konfiguration ist lb://serviceId, das Prädikat ist /serviceId/** und der Filter ist Rewritepath, um serviceId zu entfernen.
globaler Filter
ReactiveLoadBalancerClientFilter
Um den Routing-URI mit dem lb-Schema zu verarbeiten, rufen Sie zunächst die Dienstinstanz entsprechend dem Dienstnamen über ServiceInstanceListSupplier ab und verteilen Sie dann den Lastausgleich über die ReactorLoadBalancer-Instanz
RouteToRequestUrlFilter
Machen Sie zwei Dinge: 1. Unterstützen Sie 2-Ebenen-Schemata, speichern Sie das äußere Schema in GATEWAY_SCHEME_PREFIX_ATTR und entfernen Sie es dann. 2. Verwenden Sie das innere Schema, den Host und den Port, um den tatsächlich angeforderten URI zu ersetzen und eine Weiterleitung zu erreichen.