Red de conocimiento informático - Problemas con los teléfonos móviles - Tutorial 2 de la serie Chunyun Gateway-Filtro de puerta de enlace _Parte 2

Tutorial 2 de la serie Chunyun Gateway-Filtro de puerta de enlace _Parte 2

Continúa con el artículo anterior

La fábrica de filtros de puerta de enlace RequestRatelimiter utiliza Ratelimiter para decidir si permite que pase la solicitud actual. Si no se permite, el código de estado HTTP 429: Demasiadas solicitudes se devolverá de forma predeterminada.

El filtro de puerta de enlace Requestratelimiter puede utilizar el parámetro opcional keyResolver para limitar la velocidad.

KeyResolver es un bean de implementación de la interfaz KeyResolver. En la configuración, el nombre del bean myKeyResolver es administrado por la expresión SpEL #{@myKeyResolver}.

KeyResolver.java.

La interfaz KeyResolver permite utilizar diferentes estrategias para obtener claves que limiten las solicitudes. En el futuro, el gobierno también introducirá algunas implementaciones diferentes de KeyResolver.

La implementación predeterminada de KeyResolver es PrincipalNameKeyResolver, que obtiene el Principal de ServerWebExchange y utiliza Principal.getName() como clave limitadora de corriente.

Si KeyResolver no puede obtener la clave, la solicitud se limitará de forma predeterminada. También puedes configurar Spring. filtro de puerta de enlace de denegación de clave vacía: cuando se devuelve la clave. es un código de estado vacío.

Application.Properties

La implementación de redis basada en Stripe se basa en el iniciador Spring-Boot-Starter-Data-Redis-Reactive Spring Boot y utiliza el algoritmo de depósito de tokens.

Limitador de tipos de interés de Redis. La tasa de reabastecimiento configura la cantidad de solicitudes permitidas por segundo, que en realidad es la tasa de llenado del depósito de tokens.

Limitador de tipos de interés de Redis. La capacidad de ráfaga se configura utilizando la cantidad máxima de solicitudes en un segundo, que en realidad es la capacidad máxima del depósito de tokens. Si se establece en 0, se bloquearán todas las solicitudes.

Por lo tanto, se puede lograr un control de velocidad unificado configurando la misma tasa de respuesta y burstCapacity. Al configurar burstCapacity mayor que la tasa de respuesta, se puede permitir que el tráfico del sistema se expanda instantáneamente, pero en este caso, la ráfaga. El período es burstCapacity/replenishRate segundos. Si tiene dos solicitudes en ráfaga en el bucle, algunas solicitudes se perderán la segunda vez y se devolverá HTTP 429: demasiadas solicitudes.

Aplicación.yml

Config.java.

Lo anterior define un límite de velocidad de 10 solicitudes por segundo por usuario, lo que permite 20 ráfagas de tráfico. Después de la ráfaga, solo se permiten 10 solicitudes en el siguiente segundo. KeyResolver define el parámetro de solicitud usuario como la clave que se obtendrá a través de la solicitud.

También puede implementar la interfaz RateLimiter para personalizar su propio limitador de tasa de solicitudes y configurar el nombre del bean correspondiente utilizando una expresión SpEL en el archivo de configuración.

Application.yml

La fábrica RedirectTo GatewayFilter utiliza dos parámetros: estado y URL, donde estado debe ser el código de estado HTTP de la serie 300 y URL es la dirección de salto, que se colocará en el encabezado de la posición de respuesta (.

Elimine la fábrica del filtro de puerta de enlace de nonproxyheaders y reenvíe la solicitud.

Según la definición del IETF, la siguiente información del encabezado http se eliminará de forma predeterminada:

También puede cambiar la lista de encabezados que deben eliminarse configurando Spring. nube. filtro de puerta de enlace. remove-non-proxy-headers.

RemoveRequestHeader El nombre del encabezado de configuración de fábrica del filtro de puerta de enlace, es decir, el encabezado solicitado se puede eliminar.

Application.yml

Cuando la ruta anterior envía una solicitud en sentido descendente, eliminará la información del encabezado X-Request-Foo en la solicitud.

Cuando llegue la respuesta, la fábrica de filtros de puerta de enlace removesponseheader eliminará el encabezado configurando su nombre.

Application.yml

La ruta anterior eliminará la información del encabezado de respuesta X-Response-Foo cuando la respuesta se devuelva al cliente de puerta de enlace.

La fábrica de filtros de puerta de enlace de ruta de reescritura utiliza dos parámetros, expresión regular de ruta y reemplazo de ruta de reemplazo, para la reescritura de rutas. Ambos parámetros pueden usar expresiones regulares de Java de manera flexible.

Application.yml

Para el ejemplo anterior, si la ruta solicitada es /foo/bar, la puerta de enlace cambiará la ruta solicitada a /bar y la enviará en sentido descendente.

La fábrica de filtros de puerta de enlace rewriteresponseheader se utiliza para modificar el contenido del encabezado devuelto por la respuesta. Debe configurar el nombre del encabezado devuelto en la respuesta, la expresión regular de la regla coincidente y la palabra de reemplazo. Estas también son expresiones regulares que admiten Java.

Application.yml

Por ejemplo, en el filtro anterior, ¿qué pasa si el contenido del encabezado de respuesta X-Response-Foo es /42? Usuario=Ford; Contraseña=¡Dios mío! ¿Qué? Bandera = verdadero, ¿este contenido se modificará a /42? user=Ford; contraseña= * * * & ampflag=true .

La fábrica de filtros Save Session Gateway aplica el método WebSession::save cuando la solicitud es descendente, que se utiliza para diferir datos como Spring Session Store y garantizar El estado de la sesión se guarda antes de reenviar la solicitud.

application.yml

Si integra Spring Secrecy con Spring Session y desea garantizar que toda la información de seguridad se transmita a las máquinas posteriores, debe configurar este filtro.

La fábrica de filtros de puerta de enlace de encabezados de seguridad agregará una serie de encabezados con funciones de seguridad a la respuesta devuelta. En cuanto a por qué, aquellos que dominan bien el inglés pueden leer este blog.

De forma predeterminada, se agregará esta información de encabezado y el contenido predeterminado:

Si desea modificar el contenido predeterminado de esta información de encabezado, puede agregar la siguiente configuración en el archivo de configuración. :

Prefijo: spring . cloud . gateway filter .secure-headers

Sufijo correspondiente al encabezado anterior:

Simplemente conecte el prefijo y el sufijo. ejemplo: primavera nube. filtro de puerta de enlace.

La fábrica SetPath GatewayFilter modifica el padre de una ruta utilizando parámetros de plantilla de ruta solicitando una plantilla para un fragmento de ruta y ejecuta plantillas para múltiples fragmentos de ruta.

Application.yml

Para el ejemplo anterior, si la ruta es /foo/bar, entonces la ruta de solicitud posterior se modificará a /bar.

La fábrica de filtros de puerta de enlace SetresponseHeader reemplaza los encabezados de la respuesta estableciendo un nombre y un valor.

Application.yml

Para el ejemplo anterior, si el encabezado de retorno descendente es X-Response-Foo:1234, entonces la puerta de enlace se reemplazará con X-Response-Foo:Bar y luego devuelto al cliente.

La fábrica SetStatus GatewayFilter modifica el código de retorno de la respuesta configurando un parámetro de enumeración Spring HttpStatus válido, que puede ser un número similar a 404 o la cadena de nombre de la enumeración.

Application.yml

En el ejemplo anterior, ambas rutas establecen el código de estado de la respuesta en 401.

La fábrica de filtros de puerta de enlace con prefijos indica el número de prefijos de ruta truncados a través de una sección de configuración.

Application.yml

Igual que el ejemplo anterior, si la ruta solicitada es /name/bar/foo, entonces la ruta se modificará a /foo, es decir, la ruta Se eliminarán los dos prefijos.

La fábrica de filtros de puerta de enlace de reintento se puede configurar para reintentar diferentes solicitudes de respuesta y se pueden configurar los siguientes parámetros:

application.yml

arriba En el Por ejemplo, cuando el servicio descendente devuelve un código de estado 502, la puerta de enlace lo volverá a intentar tres veces.

La fábrica de filtros de puerta de enlace RequestSize limitará el tamaño del paquete de solicitud del cliente y configurará el tamaño máximo de carga en bytes a través del parámetro Requestsize.

application.yml

Si el tamaño de la solicitud excede el límite de 5000 kb, se devolverá el código de estado 413 Carga útil demasiado grande.

Modificar el cuerpo de la solicitud. La fábrica de filtros de puerta de enlace puede modificar el contenido del cuerpo de la solicitud, que solo se puede configurar a través de Java.

Modificar el cuerpo de la respuesta. La fábrica de filtros de puerta de enlace se utiliza para modificar el contenido devuelto por la respuesta y solo se puede configurar a través de Java.

Este capítulo presenta los escenarios de uso de los filtros de puerta de enlace oficiales de Spring Cloud Gateway, y el siguiente capítulo habla sobre el uso de filtros globales.

Si desea ver otros casos y métodos de uso de Spring Cloud Gateway, puede hacer clic para verlos.