Поделиться через


Использование фильтров маршрутов VMware Spring Cloud с планом Azure Spring Apps Enterprise

Примечание.

Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.

Эта статья относится к: ❎ Basic/Standard ✅ Enterprise

В этой статье объясняется, как использовать фильтры маршрутов шлюза VMware Spring Cloud с планом Azure Spring Apps Enterprise для маршрутизации запросов в приложения.

VMware Spring Cloud Gateway — это коммерческий компонент VMware Tanzu на основе проекта Шлюза Spring Cloud с открытым исходным кодом. Spring Cloud Gateway обрабатывает перекрестные проблемы для команд разработки API, таких как единый вход (SSO), управление доступом, ограничение скорости, устойчивость, безопасность и многое другое. Вы можете ускорить доставку API с помощью современных собственных схем работы в облаке и любого языка программирования, выбранного для разработки API.

Шлюз VMware Spring Cloud включает следующие функции:

  • Динамическая конфигурация маршрутизации, независимо от отдельных приложений, которые могут применяться и изменяться без повторной компиляции.
  • Фильтры маршрутов коммерческого API для передачи авторизованного утверждения веб-маркера JSON (JWT) в службы приложений.
  • Авторизация сертификата клиента.
  • Подходы к ограничению скорости.
  • Конфигурация разбиения цепи.
  • Поддержка доступа к службам приложений с помощью учетных данных проверки подлинности HTTP Basic.

Чтобы интегрироваться с порталом API для VMware Tanzu, VMware Spring Cloud Gateway автоматически создает документацию OpenAPI версии 3 после любых добавлений или изменений конфигурации маршрута. Дополнительные сведения см . на портале API для VMware Tanzu.

Необходимые компоненты

Использование фильтров

Фильтры в конфигурации Шлюза Spring Cloud используются для выполнения действий по входящему запросу или исходящему ответу на конфигурацию маршрута.

Например, можно использовать фильтр для добавления заголовка HTTP или запрета доступа на основе маркера авторизации.

Использование фильтров открытый код

OSS шлюза Spring Cloud включает несколько GatewayFilter фабрик, используемых для создания фильтров для маршрутов. В следующих разделах описаны эти фабрики.

AddRequestHeader

Фабрика AddRequestHeader добавляет заголовок в заголовки нижнего запроса для всех соответствующих запросов.

Эта фабрика принимает следующие параметры конфигурации:

  • name
  • value

В следующем примере настраивается AddRequestHeader фабрика, которая добавляет заголовок X-Request-red:blue в заголовки нижнего потока запроса для всех соответствующих запросов:

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

Фабрика AddRequestHeader имеет доступ к переменным URI, используемым для сопоставления пути или узла. Переменные URI можно использовать в значении, а переменные развертываются во время выполнения.

В следующем примере настраивается AddRequestHeader фабрика, использующая переменную:

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

AddRequestHeadersIfNotPresent

Фабрика AddRequestHeadersIfNotPresent добавляет заголовки, если они отсутствуют в исходном запросе.

Эта фабрика принимает следующий параметр конфигурации:

  • headers: разделенный запятыми список пар "ключ-значение" (имя заголовка, значение заголовка).

В следующем примере настраивается AddRequestHeadersIfNotPresent фабрика:

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

AddRequestParameter

Фабрика AddRequestParameter добавляет параметр в строку запроса нижестоящего запроса для всех соответствующих запросов.

Эта фабрика принимает следующие параметры конфигурации:

  • name
  • value

В следующем примере настраивается AddRequestParameter фабрика, которая добавляет red=blue параметр в строку запроса нижестоящего запроса для всех соответствующих запросов:

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

Фабрика AddRequestParameter имеет доступ к переменным URI, используемым для сопоставления пути или узла. Переменные URI можно использовать в значении, а переменные развертываются во время выполнения.

В следующем примере настраивается AddRequestParameter фабрика, использующая переменную:

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

AddResponseHeader

Фабрика AddResponseHeader добавляет заголовок в заголовки нижестоящего ответа для всех соответствующих запросов.

Эта фабрика принимает следующие параметры конфигурации:

  • name
  • value

В следующем примере настраивается AddResponseHeader фабрика, которая добавляет X-Response-Red:Blue заголовок в заголовки нижестоящего ответа для всех соответствующих запросов:

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

Фабрика AddResponseHeader имеет доступ к переменным URI, используемым для сопоставления пути или узла. Переменные URI можно использовать в значении, а переменные развертываются во время выполнения.

В следующем примере настраивается AddResponseHeader фабрика, использующая переменную:

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

CircuitBreaker

Фабрика CircuitBreaker упаковывает маршруты в выключатель.

Эта фабрика принимает следующие параметры конфигурации:

  • name: имя разбителя цепи.
  • fallbackUri: URI перенаправления, который может быть локальным маршрутом или внешним обработчиком.
  • status codes (необязательно): список кодов состояния, разделенных двоеточием, совпадающий с числом или текстовым форматом.
  • failure rate (необязательно): пороговое значение, над которым открывается средство разбиения цепи. Значение по умолчанию — 50 %.
  • duration (необязательно): время ожидания перед закрытием снова. Значение по умолчанию составляет 60 секунд.

В следующем примере настраивается CircuitBreaker фабрика:

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

DeDupeResponseHeader

Фабрика DeDupeResponseHeader удаляет повторяющиеся значения заголовков ответа.

Эта фабрика принимает следующие параметры конфигурации:

  • name: разделенный пробелом список имен заголовков.
  • strategy(необязательно): допустимые значения: RETAIN_FIRSTи RETAIN_LASTRETAIN_UNIQUE. Значение по умолчанию — RETAIN_FIRST.

В следующем примере настраивается DeDupeResponseHeader фабрика, которая удаляет повторяющиеся значения Access-Control-Allow-Credentials заголовков и Access-Control-Allow-Origin заголовков ответа при добавлении обоих значений логикой CORS шлюза и нижестоящей логикой:

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

Резервные головы

Фабрика FallbackHeaders добавляет в заголовок любое исключение отсортатора цепи. Для этого фильтра требуется использование CircuitBreaker фильтра в другом маршруте.

Для этой фабрики нет параметров.

В следующем примере настраивается FallbackHeaders фабрика с типом исключения, сообщением и (если доступно) типом исключения и сообщением, которое FallbackHeaders фильтр добавляет в запрос:

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

Имена заголовков в конфигурации можно перезаписать, задав значения следующих параметров (упомянутые со значениями по умолчанию):

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

JSONToGRPC

Фабрика JSONToGRPCFilter преобразует полезные данные JSON в запрос gRPC.

Эта фабрика принимает следующий параметр конфигурации:

  • protoDescriptor: файл дескриптора proto.

Этот файл можно создать с помощью protoc и указания флага --descriptor_set_out , как показано в следующем примере:

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

Примечание.

Параметр streaming не поддерживается.

Следующий пример настраивает фабрику JSONToGRPCFilter с помощью выходных данных:protoc

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

LocalResponseCache

Фабрика LocalResponseCache переопределяет конфигурацию локального кэша ответов для определенных маршрутов при активации глобального кэша.

Эта фабрика принимает следующие параметры конфигурации:

  • size: максимальный допустимый размер записей кэша для этого маршрута перед началом вытеснения кэша (в КБ, МБ и ГБ).
  • timeToLive: допустимое время существования записи кэша до истечения срока действия. Используйте суффикс s длительности в секундах, m в минутах или h в течение нескольких часов.

В следующем примере настраивается LocalResponseCache фабрика:

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

MapRequestHeader

Фабрика MapRequestHeader добавляет заголовок в подчиненный запрос с обновленными значениями из заголовка входящего HTTP-запроса.

Эта фабрика принимает следующие параметры конфигурации:

  • fromHeader
  • toHeader

Эта фабрика создает новый именованный заголовок (toHeader), а значение извлекается из существующего именованного заголовка (fromHeader) из входящего HTTP-запроса. Если входной заголовок не существует, фильтр не действует. Если новый именованный заголовок уже существует, его значения дополняются новыми значениями.

В следующем примере настраивается фабрика, которая добавляет X-Request-Red:<values> заголовок в подчиненный MapRequestHeader запрос с обновленными значениями из заголовка входящего HTTP-запросаBlue:

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

ПрефиксPath

Фабрика PrefixPath добавляет префикс в путь ко всем запросам.

Эта фабрика принимает следующий параметр конфигурации:

  • prefix

В следующем примере настраивается PrefixPath фабрика, которая добавляет префикс /api в путь ко всем запросам, чтобы отправить запрос /catalog /api/catalogв:

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

PreserveHostHeader

Фабрика PreserveHostHeader задает атрибут запроса, который фильтр маршрутизации проверяет, чтобы определить, следует ли отправлять исходный заголовок узла или заголовок узла, определенный HTTP-клиентом.

Для этой фабрики нет параметров.

В следующем примере настраивается PreserveHostHeader фабрика:

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

RedirectTo

Фабрика добавляет перенаправление RedirectTo к исходному URL-адресу.

Эта фабрика принимает следующие параметры конфигурации:

  • status: 300 серии перенаправляет HTTP-код, например 301.
  • url: значение заголовка Location . Должен быть допустимым универсальным кодом ресурса (URI). Для относительных перенаправлений следует использовать uri: no://op в качестве URI определения маршрута.

В следующем примере настраивается RedirectTo фабрика, которая отправляет состояние 302 с заголовком Location:https://acme.org для выполнения перенаправления:

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

RemoveJsonAttributesResponseBody

Фабрика RemoveJsonAttributesResponseBody удаляет атрибуты JSON и их значения из тел ответа JSON.

Эта фабрика принимает следующие параметры конфигурации:

  • attribute names: разделенный запятыми список имен атрибутов для удаления из ответа JSON.
  • delete recursively (необязательно, логическое значение): конфигурация, которая удаляет атрибуты только на корневом уровне (false) или рекурсивно (true). Значение по умолчанию — false.

В следующем примере настраивается RemoveJsonAttributesResponseBody фабрика:

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

RemoveRequestHeader

Фабрика RemoveRequestHeader удаляет заголовок из нижнего запроса.

Эта фабрика принимает следующий параметр конфигурации:

  • name: имя заголовка, который нужно удалить.

В следующем списке настраивается RemoveRequestHeader фабрика, которая удаляет X-Request-Foo заголовок перед отправкой внизу:

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

RemoveRequestParameter

Фабрика RemoveRequestParameter удаляет параметр перед отправкой внизу.

Эта фабрика принимает следующий параметр конфигурации:

  • name: имя параметра запроса, который необходимо удалить.

Следующий пример настраивает фабрику RemoveRequestParameter , которая удаляет red параметр перед отправкой ниже:

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

RemoveResponseHeader

Фабрика RemoveResponseHeader удаляет заголовок из ответа, прежде чем он вернется клиенту шлюза.

Эта фабрика принимает следующий параметр конфигурации:

  • name: имя заголовка, который нужно удалить.

Следующий список настраивает RemoveResponseHeader X-Response-Foo фабрику, которая удаляет заголовок из ответа, прежде чем он возвращается клиенту шлюза:

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

RequestHeaderSize

Фабрика RequestHeaderSize определяет размер заголовка запроса.

Эта фабрика принимает следующие параметры конфигурации:

  • maxSize: максимальный размер данных, разрешенный заголовком запроса, включая ключ и значение.
  • errorHeaderName: имя заголовка ответа, содержащего сообщение об ошибке. По умолчанию используется errorMessageимя заголовка ответа.

Следующий список настраивает фабрику RequestHeaderSize , которая отправляет состояние 431 , если размер любого заголовка запроса превышает 1000 байт:

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

ПереопределениеLocationResponseHeader

Фабрика RewriteLocationResponseHeader изменяет значение заголовка Location ответа, как правило, чтобы избавиться от сведений о серверной части.

Эта фабрика принимает следующие параметры конфигурации:

  • stripVersionMode: этот параметр имеет следующие возможные значения: NEVER_STRIP, AS_IN_REQUESTи ALWAYS_STRIP. Значение по умолчанию — AS_IN_REQUEST.

    • NEVER_STRIP: версия не удаляется, даже если исходный путь запроса не содержит версии.
    • AS_IN_REQUEST: версия удаляется только в том случае, если исходный путь запроса не содержит версии.
    • ALWAYS_STRIP: версия всегда удаляется, даже если исходный путь запроса содержит версию.
  • hostValue: этот параметр используется для замены host:port части заголовка ответа Location при указании. Если он не указан, используется значение заголовка Host запроса.

  • protocolsRegex: допустимая регрессия String, с которой сопоставляется имя протокола. Если он не соответствует, фильтр не работает. Значение по умолчанию — http|https|ftp|ftps.

  • locationHeaderName

В следующем списке RewriteLocationResponseHeader настраивается фабрика:

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

В этом примере для значения POST api.example.com/some/object/nameLocation запроса значение заголовка object-service.prod.example.net/v2/some/object/id ответа перезаписывается как .api.example.com/some/object/id

ПерезаписьPath

Фабрика RewritePath использует регулярные выражения Java для гибкого способа перезаписи пути запроса.

Эта фабрика принимает следующие параметры конфигурации:

  • regexp
  • replacement

В следующем списке RewritePath настраивается фабрика:

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

В этом примере для пути /red/blueзапроса эта конфигурация задает путь перед /blue выполнением нижестоящего запроса.

ПереопределениеResponseHeader

Фабрика RewriteResponseHeader использует регулярные выражения Java для гибкого способа переопределения значения заголовка ответа.

Эта фабрика принимает следующие параметры конфигурации:

  • name
  • regexp
  • replacement

В следующем примере настраивается RewriteResponseHeader фабрика:

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

В этом примере для значения заголовка /42?user=ford&password=omg!what&flag=trueзадана конфигурация /42?user=ford&password=***&flag=true после выполнения нижестоящего запроса.

SetPath

Фабрика SetPath предлагает простой способ управления путем запроса, позволяя шаблонным сегментам пути. Этот фильтр использует шаблоны URI из Spring Framework и позволяет использовать несколько соответствующих сегментов.

Эта фабрика принимает следующий параметр конфигурации:

  • template

В следующем примере настраивается SetPath фабрика:

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

В этом примере для пути /red/blueзапроса эта конфигурация задает путь перед /blue выполнением нижестоящего запроса.

SetRequestHeader

Фабрика SetRequestHeader заменяет (а не добавляя) все заголовки заданным именем.

Эта фабрика принимает следующие параметры конфигурации:

  • name
  • value

В следующем списке SetRequestHeader настраивается фабрика:

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

В этом примере подчиненный сервер ответил на X-Request-Red:1234него, и он заменен X-Request-Red:Blueна .

Фабрика SetRequestHeader имеет доступ к переменным URI, используемым для сопоставления пути или узла. Переменные URI можно использовать в значении, а переменные развертываются во время выполнения.

В следующем примере настраивается SetRequestHeader фабрика, использующая переменную:

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

SetResponseHeader

Фабрика SetResponseHeader заменяет (а не добавляя) все заголовки заданным именем.

Эта фабрика принимает следующие параметры конфигурации:

  • name
  • value

В следующем списке SetResponseHeader настраивается фабрика:

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

В этом примере подчиненный сервер ответил на X-Response-Red:1234него, и он заменен X-Response-Red:Blueна .

Фабрика SetResponseHeader имеет доступ к переменным URI, используемым для сопоставления пути или узла. Переменные URI можно использовать в значении, а переменные развертываются во время выполнения.

В следующем примере настраивается SetResponseHeader фабрика, использующая переменную:

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

SetStatus

Фабрика SetStatus настраивает состояние ответа запроса сервера.

Эта фабрика принимает следующий параметр конфигурации:

  • status: допустимое значение Spring HttpStatus , которое может иметь целочисленное значение, например 404, или строковое представление перечисления, например NOT_FOUND.

В следующем списке SetStatus настраивается фабрика:

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

StripPrefix

Фабрика StripPrefix удаляет префикс из запроса перед отправкой его вниз.

Эта фабрика принимает следующий параметр конфигурации:

  • parts: количество частей в пути для удаления из запроса перед отправкой его вниз. Значение по умолчанию равно 1.

В следующем примере настраивается StripPrefix фабрика:

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

В этом примере запрос выполняется через шлюз /name/blue/red. Запрос, сделанный для nameservice nameservice/redотображения.

Повторить попытку

Фабрика Retry определяет количество повторных попыток.

Эта фабрика принимает следующие параметры конфигурации:

  • retries: количество повторных попыток, которые следует предпринять.
  • statuses: коды состояния HTTP, которые должны быть извлечены, представленные с помощью org.springframework.http.HttpStatus.
  • methods: методы HTTP, которые должны быть извлечены, представленные с помощью org.springframework.http.HttpMethod.
  • series: ряд кодов состояния, которые необходимо получить, представленные с помощью org.springframework.http.HttpStatus.Series.
  • exceptions: список выброшенных исключений, которые должны быть извлечены.
  • backoff: настроенная экспоненциальная обратная передача для повторных попыток. Повторные попытки выполняются после интервала обратного firstBackoff * (factor ^ n)выхода, где n выполняется итерация. Если maxBackoff настроено, максимальное значение обратного выхода ограничено maxBackoff. Если basedOnPreviousValue задано значение true, backoff вычисляется с помощью .prevBackoff * factor

При включении для фильтра настроены Retry следующие значения по умолчанию:

  • retries:три раза.
  • series: серия 5XX.
  • methods: метод GET.
  • exceptions: IOException и TimeoutException.
  • backoff:нетрудоспособный.

В следующем примере настраивается Retry фабрика:

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

RequestSize

Фабрика RequestSize может ограничить запрос от достижения нижестоящей службы, если размер запроса превышает допустимое ограничение.

Эта фабрика принимает следующий параметр конфигурации:

  • maxSizeDataSize: тип, в котором значения определяются как число, за которым следует необязательный DataUnit суффикс, KB например илиMB. Значение суффикса по умолчанию — B для байтов. Это допустимый размер запроса, определенный в байтах.

В следующем примере настраивается RequestSize фабрика:

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

В этом примере, когда запрос отклоняется из-за размера, RequestSize фабрика задает состояние 413 Payload Too Large ответа другим заголовком errorMessage.

В следующем примере показано errorMessage:

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

TokenRelay

Фабрика TokenRelay перенаправит OAuth2 маркер доступа в подчиненные ресурсы. Этот фильтр настраивается как boolean значение в определении маршрута, а не явный фильтр.

В следующем примере настраивается TokenRelay фабрика:

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

Использование коммерческих фильтров

Spring Cloud Gateway для Kubernetes также предоставляет множество пользовательских GatewayFilter фабрик. В следующих разделах описаны эти фабрики.

AllowedRequestCookieCount

Фабрика AllowedRequestCookieCount определяет, разрешено ли выполнение соответствующего запроса на основе количества файлов cookie.

Эта фабрика принимает следующий параметр конфигурации:

  • amount: количество разрешенных файлов cookie.

В следующем примере настраивается AllowedRequestCookieCount фабрика:

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

AllowedRequestHeadersCount

Фабрика AllowedRequestHeadersCount определяет, разрешено ли выполнение соответствующего запроса на основе количества заголовков.

Эта фабрика принимает следующий параметр конфигурации:

  • amount: число разрешенных заголовков.

В следующем примере настраивается AllowedRequestHeadersCount фабрика:

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

AllowedRequestQueryParamsCount

Фабрика AllowedRequestQueryParamsCount определяет, разрешено ли выполнение соответствующего запроса на основе параметров числового запроса.

Эта фабрика принимает следующий параметр конфигурации:

  • amount: число разрешенных параметров.

В следующем примере настраивается AllowedRequestQueryParamsCount фабрика:

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

BasicAuth

Фабрика BasicAuth добавляет BasicAuth Authorization заголовок в запросы.

Для этой фабрики нет параметров.

В следующем примере настраивается BasicAuth фабрика:

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

ClaimHeader

Фабрика ClaimHeader копирует данные из утверждения JWT в заголовок HTTP.

Эта фабрика принимает следующие параметры конфигурации:

  • Claim name: имя передаваемого утверждения с учетом регистра.
  • Header name: имя заголовка HTTP.

В следующем примере настраивается ClaimHeader фабрика:

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

ClientCertificateHeader

Фабрика ClientCertificateHeader проверяет сертификат заголовка X-Forwarded-Client-Cert .

Эта фабрика принимает следующие параметры конфигурации:

  • domain patternX-Forwarded-Client-Cert: значение в соответствии с способностью Kubernetes распознавать ЦС сертификата клиента.
  • certificate fingerprint(необязательно): отпечаток СЕРТИФИКАТА TLS/SSL.

В следующем примере настраивается ClientCertificateHeader фабрика:

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

CORS

Фабрика Cors активирует проверки CORS в маршруте.

Эта фабрика принимает следующие параметры конфигурации, упорядоченные как пары "ключ-значение" для параметров CORS:

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

В следующем примере настраивается Cors фабрика:

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

JsonToXml

Фабрика JsonToXml преобразует текст ответа JSON в текст XML-ответа.

Эта фабрика принимает следующий параметр конфигурации:

  • wrapper: имя корневого тега для XML-ответа, если для создания допустимого XML-файла требуется другой корневой тег. Значение по умолчанию — response.

В следующем примере настраивается JsonToXml фабрика:

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

RateLimit

Фабрика RateLimit определяет, разрешено ли выполнение соответствующего запроса на основе тома запроса.

Эта фабрика принимает следующие параметры конфигурации:

  • request limit: максимальное количество запросов, принятых во время окна.
  • window duration: длительность окна в миллисекундах. Кроме того, можно использовать sm суффиксы или h суффиксы, чтобы указать длительность в секундах, минутах или часах.
  • partition source(необязательно): расположение ключа секции (claimилиheaderIPs).
  • partition key (необязательно): значение, используемое для секционирования счетчиков запросов.

В следующем примере настраивается RateLimit фабрика:

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

В следующих примерах показаны другие RateLimit конфигурации:

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}

ОграничитьRequestHeaders

Фабрика RestrictRequestHeaders определяет, разрешено ли выполнение соответствующего запроса на основе заголовков.

Если в конфигурации без учета регистра headerList отсутствуют заголовки HTTP, ответ 431 Forbidden error возвращается клиенту.

Эта фабрика принимает следующий параметр конфигурации:

  • headerList: список имен разрешенных заголовков без учета регистра.

В следующем примере настраивается RestrictRequestHeaders фабрика:

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

ПереопределениеAllResponseHeaders

Фабрика RewriteAllResponseHeaders перезаписывает несколько заголовков ответа одновременно.

Эта фабрика принимает следующие параметры конфигурации:

  • pattern to match: регулярное выражение, соответствующее значениям заголовка.
  • replacement: значение замены.

В следующем примере настраивается RewriteAllResponseHeaders фабрика:

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

ПереопределениеResponseBody

Фабрика RewriteResponseBody изменяет текст ответа.

Эта фабрика принимает следующие параметры конфигурации, упорядоченные как разделенные запятыми пары "ключ-значение", где каждая пара принимает форму pattern to match:replacement:

  • pattern to match: регулярное выражение, соответствующее тексту в тексте ответа.
  • replacement: значение замены.

В следующем примере настраивается RewriteResponseBody фабрика:

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

RewriteJsonAttributesResponseBody

Фабрика RewriteJsonAttributesResponseBody перезаписывает атрибуты JSON с помощью JSONPath нотации.

Эта фабрика принимает следующие параметры конфигурации, упорядоченные как разделенные запятыми пары "ключ-значение", где каждая пара принимает форму jsonpath:replacement:

  • jsonpath: выражение, соответствующее JSONPath тексту ответа.
  • replacement: значение замены.

В следующем примере настраивается RewriteJsonAttributesResponseBody фабрика:

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

Роли

Фабрика Roles авторизует запросы, содержащие одну из настроенных ролей.

Эта фабрика принимает следующий параметр конфигурации:

  • roles: разделенный запятыми список авторизованных ролей.

В следующем примере настраивается Roles фабрика:

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

Области

Фабрика Scopes авторизует запросы, содержащие одну из настроенных OAuth областей.

Эта фабрика принимает следующий параметр конфигурации:

  • scopes: разделенный запятыми список авторизованных OAuth областей.

В следующем примере настраивается Scopes фабрика:

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

StoreIpAddress

Фабрика StoreIPAddress используется только для разработки расширений и в контексте приложения.

Эта фабрика принимает следующий параметр конфигурации:

  • attribute name: имя, используемое для хранения IP-адреса в качестве атрибута exchange.

В следующем примере настраивается StoreIPAddress фабрика:

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

Вход единого входа

Фабрика SSO login перенаправляет проверку подлинности, если нет допустимого маркера авторизации. Эта фабрика настроена как boolean значение в определении маршрута, а не явный фильтр.

В следующем примере настраивается SSO login фабрика:

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

StoreHeader

Фабрика StoreHeader сохраняет значение заголовка в контексте приложения. Этот фильтр используется только для разработки расширений.

Эта фабрика принимает следующие параметры конфигурации:

  • headers: список заголовков для проверки. Используется первая найденная.
  • attribute name: имя, используемое для хранения значения заголовка в качестве атрибута Exchange.

В следующем примере настраивается StoreHeader фабрика:

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

XmlToJson

Фабрика XmlToJson преобразует текст ответа XML в текст ответа JSON.

Для этой фабрики нет параметров.

В следующем примере настраивается XmlToJson фабрика:

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

Следующие шаги