Seguridad, limitación actual: filtrar información ilegal en la capa de puerta de enlace
puerta de enlace externa nginx, intranet de puerta de enlace
nginx se puede mejorar con Lua o Kong
concepto
id: el nombre es arbitrario
uri: la dirección del servicio proxy. id y uri son obligatorios, predicado y filtro son opcionales
Predicado: se puede utilizar para hacer coincidir la uri para acceder a la puerta de enlace. Si coincide, la ruta actual entrará en vigor.
Filtro: una instancia de GatewayFilter, que agrega lógica antes o después del proxy, con la mayor flexibilidad
Flujo de procesamiento
Primero, Handler Mapping procesa la URL y luego se la entrega a Web Handler. Una vez que se completa el procesamiento, llama al servicio proxy real y ejecuta la lógica. de la segunda mitad del filtro Devuelve el resultado a WebHandler, luego a HandlerMapping y finalmente al cliente.
Si los elementos de la lista tienen varios campos, necesita "-" y dos puntos para especificar cada campo y valor respectivamente; si solo hay un campo, puede usar comas para separarlo.
Configuración del tipo de objeto, cada campo se puede configurar mediante "-" y dos puntos
Tipo de mapa: clave, valor separado por dos puntos
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
predicado
La configuración del predicado es una Lista, cuyos elementos pueden ser cadenas en un formato específico u objetos. Método de escritura de cadenas: dividido por signo igual, la primera parte es el nombre del predicado, la segunda parte los argumentos están separados por comas, el valor se guarda en el valor del Mapa y la clave del Mapa se genera automáticamente. Método de escritura de objetos: PredicateDefinition
Si hay comas y dos puntos en los argumentos, no se puede utilizar el formato de cadena
El método shortType define el método de análisis de los parámetros args para ConfigClass: shortFieldOrder elimina el prefijo shortFieldPrefix y corresponde al nombre del campo ConfigClass. El valor del parámetro args corresponde al valor del campo de ConfigClass; : Lista separada por comas, pero el último El valor es un valor booleano, que eventualmente se convierte en un Mapa de 2 claves. El valor de la primera clave es la Lista delante del valor booleano, y la segunda clave es la. Valor booleano.
Se utiliza para hacer coincidir solicitudes para acceder a la puerta de enlace (como uri, parámetros de consulta, encabezados de solicitud). Si coinciden, la ruta actual entrará en vigor.
Correspondiente a la implementación de GatewayPredicate, la clase de implementación es creada por la fábrica. La fábrica es la clase de implementación de RoutePredicateFactory. La especificación de nomenclatura de la clase de implementación es: nombre de predicado + RoutePredicateFactory. Por ejemplo, Path corresponde a PathRoutePredicateFactory.
El nombre del predicado corresponde al prefijo del nombre de clase de la clase de implementación de fábrica, y los argumentos del parámetro de predicado corresponden a la ConfigClass de fábrica.
Múltiples predicados sonyRelación
Cuando el predicado no pasa, la puerta de enlace devuelve 404
Camino
Haga coincidir rutas, admita la coincidencia de hormigas y extraiga uriVariables a través de {}
Consulta
¿Existe un nombre de parámetro de solicitud http correspondiente? El valor puede ser regular.
El nombre es fijo Consulta, args tiene 2 valores, parámetro y expresión regular, correspondientes al nombre y valor del parámetro de consulta.
Cuando solo se configura el nombre, significa que mientras exista el parámetro de solicitud, se pasará.
Encabezamiento
Encabezado Ruta Predicado Fábrica
Haga coincidir el nombre y el valor del encabezado de la solicitud. Solo puede hacer coincidir el nombre. El valor del encabezado de la solicitud real puede ser múltiple. Siempre que haya una coincidencia, el valor de configuración admite expresiones regulares.
Método
Coincide con el método de solicitud HTTP. La configuración debe estar en letras mayúsculas y separada por comas.
Dirección remota
La IP del cliente que coincide con la solicitud, para ser precisos, la IP del último proxy de red, puede ser múltiple, separada por comas.
Anfitrión
Coincide con el valor de la parte del host en el encabezado de la solicitud del Host (excluyendo el puerto). Puede ser múltiple, estar separado por comas y puede coincidir con ant.
Utilice AntPathMatcher para hacer coincidir y el separador de ruta es "."
Galleta
Haga coincidir el nombre y el valor de la cookie. El valor se puede hacer coincidir periódicamente.
Peso
Se utiliza para equilibrar la carga de diferentes rutas. Las rutas del mismo grupo se cargan según el peso.
Puedes configurar 2 valores, separados por comas, que son agrupación y peso.
WeightCalculatorWebFilter: cuando se inicia, se genera un mapa de dos capas según la configuración de peso. La primera capa es el nombre del grupo y la segunda capa es el ID de ruta. Cuando llega la solicitud, se genera un número aleatorio de 0 a 1. Se selecciona un ID de ruta para cada grupo.
WeightRoutePredicateFactory: al filtrar predicados, filtre según el grupo y el ID de ruta
filtrar
El método de escritura de la configuración es el mismo que el del predicado. El método de escritura de la cadena: dividir por signo igual. La primera parte corresponde al prefijo del nombre de la clase GatewayFilterFactory de la fábrica de filtros y la segunda parte es el parámetro.
Los filtros se utilizan para modificar solicitudes y respuestas.
Agregar encabezado de solicitud
Agregue encabezados de solicitud, que el backend puede obtener
El valor del encabezado de la solicitud admite la adquisición dinámica de uriVariables
Prefijo de desprendimiento
Solo hay un valor entero n. Después de dividir la ruta solicitada por "/", elimine el prefijo n.
Limitando
Dominio cruzado
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
El servidor determina si se trata de una solicitud entre dominios en función de si el encabezado de la solicitud Origen y el esquema, el host y el puerto de la URL de la solicitud son los mismos. Siempre que haya una diferencia, es una solicitud entre dominios.
Debe haber una configuración entre dominios y el uri solicitado coincide con el uriPattern de la configuración entre dominios. La puerta de enlace determinará si es entre dominios y permitirá encabezados de solicitud entre dominios. fuentes, métodos de solicitud y solicitudes reales en la configuración entre dominios. Si el encabezado de la solicitud, la fuente y el método de solicitud coinciden, si todos coinciden, ejecute el acceso entre dominios; de lo contrario, devuelva 403Forbiden.
Admite la obtención de ID de servicio a través del descubrimiento de servicios y genera automáticamente una configuración de enrutamiento basada en la ID de servicio.El uri de la configuración de enrutamiento predeterminada es lb://serviceId, el predicado es /serviceId/** y el filtro es Rewritepath para eliminar serviceId.
filtro global
Filtro de cliente del equilibrador de carga reactiva
Para procesar el URI de enrutamiento con el esquema lb, primero obtenga la instancia de servicio de acuerdo con el nombre del servicio a través de ServiceInstanceListSupplier y luego equilibre la carga a través de la instancia de ReactorLoadBalancer.
Ruta a filtro de URL de solicitud
Haga 2 cosas: 1. Admita esquemas de 2 capas, guarde el esquema externo en GATEWAY_SCHEME_PREFIX_ATTR y luego elimínelo. 2. Utilice el esquema interno, el host y el puerto para reemplazar el URI solicitado real para lograr el reenvío.