Compartir a través de


Uso de filtros de ruta de VMware Spring Cloud Gateway con el plan enterprise de Azure Spring Apps

Nota:

Azure Spring Apps es el nuevo nombre del servicio Azure Spring Cloud. Aunque el servicio tiene un nuevo nombre, verá el nombre antiguo en algunos lugares durante un tiempo mientras trabajamos para actualizar recursos, como capturas de pantalla, vídeos y diagramas.

Este artículo se aplica a:❌ Básico o Estándar ✔️ Enterprise

En este artículo se explica cómo usar filtros de ruta de VMware Spring Cloud Gateway con el plan de Azure Spring Apps Enterprise para enrutar las solicitudes a las aplicaciones.

Spring Cloud Gateway para VMware es un componente comercial de VMware Tanzu basado en el proyecto de código abierto Spring Cloud Gateway. Spring Cloud Gateway se encarga de las preocupaciones transversales de los equipos de desarrollo de API, como el inicio de sesión único (SSO), el control de acceso, la limitación de la velocidad, la resistencia, la seguridad, etc. Los patrones nativos de la nube modernos y cualquier lenguaje de programación que elija para el desarrollo de API pueden acelerar la entrega de API.

Spring Cloud Gateway para VMware incluye las siguientes características:

  • Configuración dinámica del enrutamiento independiente de las aplicaciones individuales, que puede aplicarse y modificarse sin necesidad de volver a compilar.
  • Filtros de ruta de API comercial para transportar notificaciones de JSON Web Token (JWT) autorizadas a los servicios de aplicación.
  • Autorización de certificados de cliente.
  • Enfoques que limitan la velocidad.
  • Configuración de disyuntores.
  • Compatibilidad con el acceso a los servicios de aplicación a través de credenciales de autenticación HTTP básica.

Para realizar la integración con el Portal de API para VMware Tanzu, VMware Spring Cloud Gateway genera automáticamente la documentación de OpenAPI versión 3 después de cualquier adición o cambio de configuración de ruta. Para más información, consulte Uso del portal de API para VMware Tanzu.

Requisitos previos

Utilizar filtros

Use filtros en la configuración de Spring Cloud Gateway para actuar sobre la solicitud entrante o la respuesta saliente a una configuración de ruta.

Por ejemplo, puede usar un filtro para agregar un encabezado HTTP o denegar el acceso en función de un token de autorización.

Uso de filtros de código abierto

Spring Cloud Gateway OSS incluye varias GatewayFilter fábricas que se usan para crear filtros para rutas. En las secciones siguientes se describen estas fábricas.

AddRequestHeader

El AddRequestHeader generador agrega un encabezado a los encabezados de la solicitud de bajada para todas las solicitudes coincidentes.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name
  • value

En el ejemplo siguiente se configura un AddRequestHeader generador que agrega el encabezado X-Request-red:blue a los encabezados de la solicitud de bajada para todas las solicitudes coincidentes:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue"
        ]
    }
]

La AddRequestHeader factoría tiene acceso a las variables de URI que se usan para buscar coincidencias con una ruta de acceso o host. Puede usar variables de URI en el valor y las variables se expanden en tiempo de ejecución.

En el ejemplo siguiente se configura un AddRequestHeader generador que usa una variable:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestHeader=X-Request-red, blue-{segment}"
        ]
    }
]

AddRequestHeadersIfNotPresent

El AddRequestHeadersIfNotPresent generador agrega encabezados si no están presentes en la solicitud original.

Esta fábrica acepta el siguiente parámetro de configuración:

  • headers: una lista separada por comas de pares clave-valor (nombre de encabezado, valor de encabezado).

En el ejemplo siguiente se configura un AddRequestHeadersIfNotPresent generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestHeadersIfNotPresent=Content-Type:application/json,Connection:keep-alive"
        ]
    }
]

AddRequestParameter

El AddRequestParameter generador agrega un parámetro a la cadena de consulta de la solicitud de bajada para todas las solicitudes coincidentes.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name
  • value

En el ejemplo siguiente se configura un AddRequestParameter generador que agrega un red=blue parámetro a la cadena de consulta de la solicitud de bajada para todas las solicitudes coincidentes:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddRequestParameter=red, blue"
        ]
    }
]

La AddRequestParameter factoría tiene acceso a las variables de URI que se usan para buscar coincidencias con una ruta de acceso o host. Puede usar variables de URI en el valor y las variables se expanden en tiempo de ejecución.

En el ejemplo siguiente se configura un AddRequestParameter generador que usa una variable:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddRequestParameter=foo, bar-{segment}"
        ]
    }
]

AddResponseHeader

El AddResponseHeader generador agrega un encabezado a los encabezados de la respuesta de bajada para todas las solicitudes coincidentes.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name
  • value

En el ejemplo siguiente se configura un AddResponseHeader generador que agrega un X-Response-Red:Blue encabezado a los encabezados de la respuesta de bajada para todas las solicitudes coincidentes:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AddResponseHeader=X-Response-Red, Blue"
        ]
    }
]

La AddResponseHeader factoría tiene acceso a las variables de URI que se usan para buscar coincidencias con una ruta de acceso o host. Puede usar variables de URI en el valor y las variables se expanden en tiempo de ejecución.

En el ejemplo siguiente se configura un AddResponseHeader generador que usa una variable:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "AddResponseHeader=foo, bar-{segment}"
        ]
    }
]

CircuitBreaker

El CircuitBreaker generador encapsula las rutas en un disyuntor.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name: nombre del disyuntor.
  • fallbackUri: el URI de redireccionamiento, que puede ser una ruta local o un controlador externo.
  • status codes (opcional): la lista separada por dos puntos de códigos de estado que debe coincidir, en formato numérico o de texto.
  • failure rate (opcional): umbral por encima del cual se abre el disyuntor. El valor predeterminado es 50 %.
  • duration (opcional): tiempo de espera antes de volver a cerrarse. El valor predeterminado es de 60 segundos.

En el ejemplo siguiente se configura un CircuitBreaker generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    }
]

DeDupeResponseHeader

El DeDupeResponseHeader generador quita los valores duplicados de los encabezados de respuesta.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name: una lista separada por espacios de nombres de encabezado.
  • strategy (opcional): los valores aceptados son RETAIN_FIRST, RETAIN_LASTy RETAIN_UNIQUE. El valor predeterminado es RETAIN_FIRST.

En el ejemplo siguiente se configura un DeDupeResponseHeader generador que quita los valores duplicados de los encabezados de Access-Control-Allow-Credentials respuesta y Access-Control-Allow-Origin cuando la lógica CORS de puerta de enlace agrega ambos valores y la lógica de bajada:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "DeDupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin"
        ]
    }
]

FallbackHeaders

El FallbackHeaders generador agrega cualquier excepción de disyuntor a un encabezado. Este filtro requiere el uso del CircuitBreaker filtro en otra ruta.

No hay parámetros para esta factoría.

En el ejemplo siguiente se configura un FallbackHeaders generador con el tipo de excepción, el mensaje y el tipo de excepción de causa principal (si está disponible) y el mensaje que el FallbackHeaders filtro agrega a la solicitud:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "CircuitBreaker=myCircuitBreaker,forward:/inCaseOfFailureUseThis,401:NOT_FOUND:500,10,30s"
        ]
    },
    {
        "predicates": [
            "Path=/inCaseOfFailureUseThis"
        ],
        "filters": [
            "FallbackHeaders"
        ]
    }
]

Puede sobrescribir los nombres de los encabezados de la configuración estableciendo los valores de los parámetros siguientes (mencionados con sus valores predeterminados):

  • executionExceptionTypeHeaderName ("Execution-Exception-Type")
  • executionExceptionMessageHeaderName ("Execution-Exception-Message")
  • rootCauseExceptionTypeHeaderName ("Root-Cause-Exception-Type")
  • rootCauseExceptionMessageHeaderName ("Root-Cause-Exception-Message")

JSONToGRPC

El JSONToGRPCFilter generador convierte una carga JSON en una solicitud gRPC.

Esta fábrica acepta el siguiente parámetro de configuración:

  • protoDescriptor: un archivo proto descriptor.

Puede generar este archivo mediante protoc y especificando la --descriptor_set_out marca , como se muestra en el ejemplo siguiente:

protoc --proto_path=src/main/resources/proto/ \
    --descriptor_set_out=src/main/resources/proto/hello.pb \
    src/main/resources/proto/hello.proto

Nota:

No se admite el streaming parámetro .

En el ejemplo siguiente se configura un JSONToGRPCFilter generador mediante la salida de protoc:

[
    {
        "predicates": [
            "Path=/json/**"
        ],
        "filters": [
            "JsonToGrpc=file:proto/hello.pb,file:proto/hello.proto,HelloService,hello"
        ]
    }
]

LocalResponseCache

El LocalResponseCache generador invalida la configuración de caché de respuesta local para rutas específicas cuando se activa la caché global.

Esta fábrica acepta los siguientes parámetros de configuración:

  • size: el tamaño máximo permitido de las entradas de caché para esta ruta antes de que comience la expulsión de caché (en KB, MB y GB).
  • timeToLive: la duración permitida de una entrada de caché antes de la expiración. Use el sufijo s de duración durante segundos, m durante minutos o h durante horas.

En el ejemplo siguiente se configura un LocalResponseCache generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "LocalResponseCache=3m,1MB"
        ]
    }
]

MapRequestHeader

El MapRequestHeader generador agrega un encabezado a la solicitud de bajada con valores actualizados del encabezado de la solicitud HTTP entrante.

Esta fábrica acepta los siguientes parámetros de configuración:

  • fromHeader
  • toHeader

Esta fábrica crea un nuevo encabezado con nombre (toHeader) y el valor se extrae de un encabezado con nombre existente (fromHeader) de la solicitud HTTP entrante. Si el encabezado de entrada no existe, el filtro no tiene ningún efecto. Si el nuevo encabezado con nombre ya existe, sus valores se aumentan con los nuevos valores.

En el ejemplo siguiente se configura un MapRequestHeader generador que agrega el X-Request-Red:<values> encabezado a la solicitud de bajada con valores actualizados del encabezado de Blue la solicitud HTTP entrante:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "MapRequestHeader=Blue, X-Request-Red"
        ]
    }
]

PrefixPath

El PrefixPath generador agrega un prefijo a la ruta de acceso de todas las solicitudes.

Esta fábrica acepta el siguiente parámetro de configuración:

  • prefix

En el ejemplo siguiente se configura un PrefixPath generador que agrega el prefijo /api a la ruta de acceso de todas las solicitudes, de modo que se envíe una solicitud a /catalog/api/catalog:

[
    {
        "predicates": [
            "Path=/catalog/**"
        ],
        "filters": [
            "PrefixPath=/api"
        ]
    }
]

PreserveHostHeader

El PreserveHostHeader generador establece un atributo de solicitud que el filtro de enrutamiento inspecciona para determinar si se debe enviar el encabezado de host original o el encabezado de host determinado por el cliente HTTP.

No hay parámetros para esta factoría.

En el ejemplo siguiente se configura un PreserveHostHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "PreserveHostHeader"
        ]
    }
]

RedirectTo

El RedirectTo generador agrega una redirección a la dirección URL original.

Esta fábrica acepta los siguientes parámetros de configuración:

  • status: un código HTTP de redirección de la serie 300, como 301.
  • url: valor del Location encabezado. Debe ser un URI válido. Para las redirecciones relativas, debe usar uri: no://op como URI de la definición de ruta.

En el ejemplo siguiente se configura un RedirectTo generador que envía un estado 302 con un Location:https://acme.org encabezado para realizar una redirección:

[
    {
        "uri": "https://example.org",
        "filters": [
            "RedirectTo=302, https://acme.org"
        ]
    }
]

RemoveJsonAttributesResponseBody

El RemoveJsonAttributesResponseBody generador quita los atributos JSON y sus valores de los cuerpos de respuesta JSON.

Esta fábrica acepta los siguientes parámetros de configuración:

  • attribute names: una lista separada por comas de los nombres de atributos que se van a quitar de una respuesta JSON.
  • delete recursively (opcional, booleano): configuración que quita los atributos solo en el nivel raíz (false) o de forma recursiva (true). El valor predeterminado es false.

En el ejemplo siguiente se configura un RemoveJsonAttributesResponseBody generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveJsonAttributesResponseBody=origin,foo,true"
        ]
    }
]

RemoveRequestHeader

El RemoveRequestHeader generador quita un encabezado de la solicitud de bajada.

Esta fábrica acepta el siguiente parámetro de configuración:

  • name: nombre del encabezado que se va a quitar.

La lista siguiente configura un RemoveRequestHeader generador que quita el X-Request-Foo encabezado antes de enviarlo de bajada:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestHeader=X-Request-Foo"
        ]
    }
]

RemoveRequestParameter

La RemoveRequestParameter fábrica quita un parámetro antes de que se envíe de bajada.

Esta fábrica acepta el siguiente parámetro de configuración:

  • name: nombre del parámetro de consulta que se va a quitar.

En el ejemplo siguiente se configura un RemoveRequestParameter generador que quita el red parámetro antes de que se envíe de bajada:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveRequestParameter=red"
        ]
    }
]

RemoveResponseHeader

El RemoveResponseHeader generador quita un encabezado de la respuesta antes de que se devuelva al cliente de puerta de enlace.

Esta fábrica acepta el siguiente parámetro de configuración:

  • name: nombre del encabezado que se va a quitar.

La lista siguiente configura un RemoveResponseHeader generador que quita el X-Response-Foo encabezado de la respuesta antes de que se devuelva al cliente de puerta de enlace:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RemoveResponseHeader=X-Response-Foo"
        ]
    }
]

RequestHeaderSize

El RequestHeaderSize generador determina el tamaño del encabezado de solicitud.

Esta fábrica acepta los siguientes parámetros de configuración:

  • maxSize: el tamaño máximo de datos permitido por el encabezado de solicitud, incluida la clave y el valor.
  • errorHeaderName: nombre del encabezado de respuesta que contiene un mensaje de error. De forma predeterminada, el nombre del encabezado de respuesta es errorMessage.

La lista siguiente configura un RequestHeaderSize generador que envía un estado 431 si el tamaño de cualquier encabezado de solicitud es mayor que 1000 bytes:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RequestHeaderSize=1000B"
        ]
    }
]

RewriteLocationResponseHeader

El RewriteLocationResponseHeader generador modifica el valor del Location encabezado de respuesta, normalmente para deshacerse de detalles específicos del back-end.

Esta fábrica acepta los siguientes parámetros de configuración:

  • stripVersionMode: este parámetro tiene los siguientes valores posibles: NEVER_STRIP, AS_IN_REQUESTy ALWAYS_STRIP. El valor predeterminado es AS_IN_REQUEST.

    • NEVER_STRIP: la versión no se quita, incluso si la ruta de acceso de solicitud original no contiene ninguna versión.
    • AS_IN_REQUEST: la versión solo se quita si la ruta de acceso de solicitud original no contiene ninguna versión.
    • ALWAYS_STRIP: la versión siempre se quita, incluso si la ruta de acceso de solicitud original contiene la versión.
  • hostValue: este parámetro se usa para reemplazar la host:port parte del encabezado de respuesta Location cuando se proporciona. Si no se proporciona, se usa el valor del Host encabezado de solicitud.

  • protocolsRegex: expresión regular Stringválida con la que coincide el nombre del protocolo. Si no coincide, el filtro no funciona. El valor predeterminado es http|https|ftp|ftps.

  • locationHeaderName

La lista siguiente configura un RewriteLocationResponseHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteLocationResponseHeader=AS_IN_REQUEST, Location, ,"
        ]
    }
]

En este ejemplo, para un valor de solicitud de , el valor del POSTapi.example.com/some/object/nameencabezado de respuesta de object-service.prod.example.net/v2/some/object/id se reescribe como api.example.com/some/object/id.Location

RewritePath

La RewritePath fábrica usa expresiones regulares de Java para una manera flexible de volver a escribir la ruta de acceso de la solicitud.

Esta fábrica acepta los siguientes parámetros de configuración:

  • regexp
  • replacement

La lista siguiente configura un RewritePath generador:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewritePath=/red/?(?<segment>.*), /$\\{segment}"
        ]
    }
]

En este ejemplo, para una ruta de acceso de solicitud de /red/blue, esta configuración establece la ruta de acceso a /blue antes de realizar la solicitud de bajada.

RewriteResponseHeader

El RewriteResponseHeader generador usa expresiones regulares de Java para una manera flexible de volver a escribir el valor del encabezado de respuesta.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name
  • regexp
  • replacement

En el ejemplo siguiente se configura un RewriteResponseHeader generador:

[
    {
        "predicates": [
            "Path=/red/**"
        ],
        "filters": [
            "RewriteResponseHeader=X-Response-Red, , password=[^&]+, password=***"
        ]
    }
]

En este ejemplo, para un valor de encabezado de /42?user=ford&password=omg!what&flag=true, la configuración se establece /42?user=ford&password=***&flag=true en después de realizar la solicitud de bajada.

SetPath

El SetPath generador ofrece una manera sencilla de manipular la ruta de acceso de solicitud al permitir segmentos con plantilla de la ruta de acceso. Este filtro usa las plantillas de URI de Spring Framework y permite varios segmentos coincidentes.

Esta fábrica acepta el siguiente parámetro de configuración:

  • template

En el ejemplo siguiente se configura un SetPath generador:

[
    {
        "predicates": [
            "Path=/red/{segment}"
        ],
        "filters": [
            "SetPath=/{segment}"
        ]
    }
]

En este ejemplo, para una ruta de acceso de solicitud de /red/blue, esta configuración establece la ruta de acceso a /blue antes de realizar la solicitud de bajada.

SetRequestHeader

El SetRequestHeader generador reemplaza (en lugar de agregar) todos los encabezados por el nombre especificado.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name
  • value

La lista siguiente configura un SetRequestHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetRequestHeader=X-Request-Red, Blue"
        ]
    }
]

En este ejemplo, el servidor de bajada respondió con X-Request-Red:1234y se reemplaza por X-Request-Red:Blue.

La SetRequestHeader factoría tiene acceso a las variables de URI que se usan para buscar coincidencias con una ruta de acceso o host. Puede usar variables de URI en el valor y las variables se expanden en tiempo de ejecución.

En el ejemplo siguiente se configura un SetRequestHeader generador que usa una variable:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetRequestHeader=foo, bar-{segment}"
        ]
    }
]

SetResponseHeader

El SetResponseHeader generador reemplaza (en lugar de agregar) todos los encabezados por el nombre especificado.

Esta fábrica acepta los siguientes parámetros de configuración:

  • name
  • value

La lista siguiente configura un SetResponseHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "SetResponseHeader=X-Response-Red, Blue"
        ]
    }
]

En este ejemplo, el servidor de bajada respondió con X-Response-Red:1234y se reemplaza por X-Response-Red:Blue.

La SetResponseHeader factoría tiene acceso a las variables de URI que se usan para buscar coincidencias con una ruta de acceso o host. Puede usar variables de URI en el valor y las variables se expanden en tiempo de ejecución.

En el ejemplo siguiente se configura un SetResponseHeader generador que usa una variable:

[
    {
        "predicates": [
            "Path=/api/{segment}"
        ],
        "filters": [
            "SetResponseHeader=foo, bar-{segment}"
        ]
    }
]

SetStatus

El SetStatus generador configura el estado de respuesta de la solicitud del servidor.

Esta fábrica acepta el siguiente parámetro de configuración:

  • status: un valor Spring HttpStatus válido, que puede ser un valor entero como 404, o la representación de cadena de la enumeración, como NOT_FOUND.

La lista siguiente configura un SetStatus generador:

[
    {
        "predicates": [
            "Path=/experimental/**"
        ],
        "filters": [
            "SetStatus=UNAUTHORIZED"
        ]
    },
    {
        "predicates": [
            "Path=/unknown/**"
        ],
        "filters": [
            "SetStatus=401"
        ]
    }
]

StripPrefix

El StripPrefix generador quita el prefijo de la solicitud antes de enviarlo de bajada.

Esta fábrica acepta el siguiente parámetro de configuración:

  • parts: número de partes de la ruta de acceso que se va a quitar de la solicitud antes de enviarlo de bajada. El valor predeterminado es 1.

En el ejemplo siguiente se configura un StripPrefix generador:

[
    {
        "predicates": [
            "Path=/name/**"
        ],
        "filters": [
            "StripPrefix=2"
        ]
    }
]

En este ejemplo, se realiza una solicitud a través de la puerta de enlace a /name/blue/red. La solicitud realizada para nameservice que aparezca como nameservice/red.

Volver a intentar

El Retry generador determina el número de reintentos intentados.

Esta fábrica acepta los siguientes parámetros de configuración:

  • retries: número de reintentos que se deben intentar.
  • statuses: los códigos de estado HTTP que se deben reintentar, representados mediante org.springframework.http.HttpStatus.
  • methods: métodos HTTP que se deben reintentar, representados mediante org.springframework.http.HttpMethod.
  • series: serie de códigos de estado que se van a reintentar, representados mediante org.springframework.http.HttpStatus.Series.
  • exceptions: lista de excepciones producidas que se deben reintentar.
  • backoff: retroceso exponencial configurado para los reintentos. Los reintentos se realizan después de un intervalo de retroceso de firstBackoff * (factor ^ n), donde n es la iteración. Si maxBackoff está configurado, el retroceso máximo aplicado se limita a maxBackoff. Si basedOnPreviousValue es true, backoff se calcula mediante prevBackoff * factor.

Los valores predeterminados siguientes están configurados para el Retry filtro, cuando se habilitan:

  • retries: tres veces.
  • series: serie 5XX.
  • methods: método GET.
  • exceptions: IOException y TimeoutException.
  • backoff:Deshabilitado.

En el ejemplo siguiente se configura un Retry generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Retry=3,INTERNAL_SERVER_ERROR,GET,10ms,50ms,2,false"
        ]
    }
]

RequestSize

La RequestSize fábrica puede restringir que una solicitud llegue al servicio de bajada cuando el tamaño de la solicitud sea mayor que el límite permitido.

Esta fábrica acepta el siguiente parámetro de configuración:

  • maxSizeDataSize: tipo donde los valores se definen como un número seguido de un sufijo opcionalDataUnit, como KB o MB. El valor de sufijo predeterminado es B para bytes. Es el límite de tamaño permitido de la solicitud definida en bytes.

En el ejemplo siguiente se configura un RequestSize generador:

[
    {
        "predicates": [
            "Path=/upload"
        ],
        "filters": [
            "RequestSize=5000000"
        ]
    }
]

En este ejemplo, cuando se rechaza la solicitud debido al tamaño, el RequestSize generador establece el estado de respuesta en 413 Payload Too Large con otro encabezado errorMessage.

En el ejemplo siguiente se muestra un errorMessage:

errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB

TokenRelay

El TokenRelay generador reenvía un OAuth2 token de acceso a los recursos de bajada. Este filtro se configura como un boolean valor en la definición de ruta en lugar de un filtro explícito.

En el ejemplo siguiente se configura un TokenRelay generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "tokenRelay": true
    }
]

Uso de filtros comerciales

Spring Cloud Gateway para Kubernetes también proporciona muchas factorías personalizadas GatewayFilter . En las secciones siguientes se describen estas fábricas.

AllowedRequestCookieCount

La AllowedRequestCookieCount fábrica determina si se permite que una solicitud coincidente continúe en función del número de cookies.

Esta fábrica acepta el siguiente parámetro de configuración:

  • amount: número de cookies permitidas.

En el ejemplo siguiente se configura un AllowedRequestCookieCount generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestCookieCount=2"
        ]
    }
]

AllowedRequestHeadersCount

El AllowedRequestHeadersCount generador determina si se permite que una solicitud coincidente continúe en función del número de encabezados.

Esta fábrica acepta el siguiente parámetro de configuración:

  • amount: número de encabezados permitidos.

En el ejemplo siguiente se configura un AllowedRequestHeadersCount generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestHeadersCount=4"
        ]
    }
]

AllowedRequestQueryParamsCount

El AllowedRequestQueryParamsCount generador determina si se permite que una solicitud coincidente continúe en función de los parámetros de consulta numéricos.

Esta fábrica acepta el siguiente parámetro de configuración:

  • amount: número de parámetros permitidos.

En el ejemplo siguiente se configura un AllowedRequestQueryParamsCount generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "AllowedRequestQueryParamsCount=3"
        ]
    }
]

BasicAuth

El BasicAuth generador agrega un BasicAuthAuthorization encabezado a las solicitudes.

No hay parámetros para esta factoría.

En el ejemplo siguiente se configura un BasicAuth generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "BasicAuth"
        ]
    }
]

ClaimHeader

El ClaimHeader generador copia los datos de una notificación JWT en un encabezado HTTP.

Esta fábrica acepta los siguientes parámetros de configuración:

  • Claim name: nombre que distingue mayúsculas de minúsculas de la notificación que se va a pasar.
  • Header name: nombre del encabezado HTTP.

En el ejemplo siguiente se configura un ClaimHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClaimHeader=sub,X-Claim-Sub"
        ]
    }
]

ClientCertificateHeader

El ClientCertificateHeader generador valida el certificado de X-Forwarded-Client-Cert encabezado.

Esta fábrica acepta los siguientes parámetros de configuración:

  • domain pattern: el valor según la X-Forwarded-Client-Cert capacidad de Kubernetes para reconocer la CA del certificado de cliente.
  • certificate fingerprint(opcional): huella digital del certificado TLS/SSL.

En el ejemplo siguiente se configura un ClientCertificateHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "ClientCertificateHeader=*.example.com,sha-1:aa:bb:00:99"
        ]
    }
]

CORS

El Cors generador activa las validaciones de CORS en una ruta.

Esta factoría acepta los siguientes parámetros de configuración que se organizan como pares clave-valor para las opciones de CORS:

  • allowedOrigins
  • allowedMethods
  • allowedHeaders
  • maxAge
  • allowCredentials
  • allowedOriginPatterns

En el ejemplo siguiente se configura un Cors generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Cors=[allowedOrigins:https://origin-1,allowedMethods:GET;POST;DELETE,allowedHeaders:*,maxAge:400,allowCredentials:true,allowedOriginPatterns:https://*.test.com:8080]"
        ]
    }
]

JsonToXml

El JsonToXml generador transforma el cuerpo de la respuesta JSON en el cuerpo de la respuesta XML.

Esta fábrica acepta el siguiente parámetro de configuración:

  • wrapper: el nombre de etiqueta raíz de la respuesta XML si se requiere otra etiqueta raíz para generar XML válido. El valor predeterminado es response.

En el ejemplo siguiente se configura un JsonToXml generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "JsonToXml=custom-response"
        ]
    }
]

RateLimit

El RateLimit generador determina si se permite que una solicitud coincidente continúe en función del volumen de solicitudes.

Esta fábrica acepta los siguientes parámetros de configuración:

  • request limit: número máximo de solicitudes aceptadas durante la ventana.
  • window duration: duración de la ventana en milisegundos. Como alternativa, puede usar los ssufijos , m o h para especificar la duración en segundos, minutos o horas.
  • partition source (opcional): la ubicación de la clave de partición (claim, headero IPs).
  • partition key (opcional): valor usado para particionar contadores de solicitudes.

En el ejemplo siguiente se configura un RateLimit generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RateLimit=1,10s"
        ]
    }
]

En los ejemplos siguientes se muestran otras RateLimit configuraciones:

RateLimit=1,10s
RateLimit=1,10s,{claim:client_id}
RateLimit=1,10s,{header:client_id}
RateLimit=2,10s,{IPs:2;127.0.0.1;192.168.0.1}

RestrictRequestHeaders

El RestrictRequestHeaders generador determina si se permite que una solicitud coincidente continúe en función de los encabezados.

Si hay encabezados HTTP que no están en la configuración sin distinción headerList entre mayúsculas y minúsculas, se devuelve una respuesta de 431 Forbidden error al cliente.

Esta fábrica acepta el siguiente parámetro de configuración:

  • headerList: lista sin distinción entre mayúsculas y minúsculas de nombres de encabezados permitidos.

En el ejemplo siguiente se configura un RestrictRequestHeaders generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RestrictRequestHeaders=Content-Type,x-request-temp"
        ]
    }
]

RewriteAllResponseHeaders

El RewriteAllResponseHeaders generador vuelve a escribir varios encabezados de respuesta a la vez.

Esta fábrica acepta los siguientes parámetros de configuración:

  • pattern to match: expresión regular que se va a coincidir con los valores de encabezado.
  • replacement: valor de reemplazo.

En el ejemplo siguiente se configura un RewriteAllResponseHeaders generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteAllResponseHeaders=\\d,0"
        ]
    }
]

RewriteResponseBody

El RewriteResponseBody generador modifica el cuerpo de una respuesta.

Esta fábrica acepta los siguientes parámetros de configuración que se organizan como una lista separada por comas de pares clave-valor, donde cada par acepta el formato pattern to match:replacement:

  • pattern to match: expresión regular que se va a coincidir con el texto del cuerpo de la respuesta.
  • replacement: valor de reemplazo.

En el ejemplo siguiente se configura un RewriteResponseBody generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteResponseBody=foo:bar,/path-one/:/path-two/"
        ]
    }
]

RewriteJsonAttributesResponseBody

El RewriteJsonAttributesResponseBody generador vuelve a escribir atributos JSON mediante JSONPath notación.

Esta fábrica acepta los siguientes parámetros de configuración que se organizan como una lista separada por comas de pares clave-valor, donde cada par acepta el formato jsonpath:replacement:

  • jsonpath: expresión JSONPath que se va a coincidir con el cuerpo de la respuesta.
  • replacement: valor de reemplazo.

En el ejemplo siguiente se configura un RewriteJsonAttributesResponseBody generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "RewriteJsonAttributesResponseBody=slides[1].title:Welcome,date:11-11-2022"
        ]
    }
]

Roles

El Roles generador autoriza las solicitudes que contienen uno de los roles configurados.

Esta fábrica acepta el siguiente parámetro de configuración:

  • roles: una lista separada por comas de roles autorizados.

En el ejemplo siguiente se configura un Roles generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Roles=role_01,role_02"
        ]
    }
]

Ámbitos

El Scopes generador autoriza las solicitudes que contienen uno de los ámbitos configurados OAuth .

Esta fábrica acepta el siguiente parámetro de configuración:

  • scopes: una lista separada por comas de ámbitos autorizados OAuth .

En el ejemplo siguiente se configura un Scopes generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "Scopes=api.read,api.write,user"
        ]
    }
]

StoreIpAddress

El StoreIPAddress generador se usa solo para el desarrollo de extensiones y en el contexto de la aplicación.

Esta fábrica acepta el siguiente parámetro de configuración:

  • attribute name: el nombre usado para almacenar la dirección IP como un atributo de intercambio.

En el ejemplo siguiente se configura un StoreIPAddress generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreIpAddress=ip"
        ]
    }
]

Inicio de sesión único

El SSO login generador redirige para autenticarse si no hay ningún token de autorización válido. Este generador se configura como un boolean valor en la definición de ruta en lugar de un filtro explícito.

En el ejemplo siguiente se configura un SSO login generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "ssoEnabled": true
    }
]

StoreHeader

El StoreHeader generador almacena un valor de encabezado en el contexto de la aplicación. Este filtro solo se usa para el desarrollo de extensiones.

Esta fábrica acepta los siguientes parámetros de configuración:

  • headers: lista de encabezados que se van a comprobar. Se usa la primera encontrada.
  • attribute name: el nombre usado para almacenar el valor de encabezado como atributo de intercambio.

En el ejemplo siguiente se configura un StoreHeader generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "StoreHeader=x-tracing-header,custom-id,x-custom-id,tracingParam"
        ]
    }
]

XmlToJson

El XmlToJson generador transforma el cuerpo de la respuesta XML en el cuerpo de la respuesta JSON.

No hay parámetros para esta factoría.

En el ejemplo siguiente se configura un XmlToJson generador:

[
    {
        "predicates": [
            "Path=/api/**"
        ],
        "filters": [
            "XmlToJson"
        ]
    }
]

Pasos siguientes