Использование фильтров маршрутов 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.
Необходимые компоненты
- Уже подготовленный экземпляр службы плана Azure Spring Apps Enterprise с включенным шлюзом Spring Cloud. Дополнительные сведения см . в кратком руководстве по созданию и развертыванию приложений в Azure Spring Apps с помощью плана Enterprise.
- Azure CLI версии 2.0.67 или более поздней. Используйте следующую команду, чтобы установить расширение Azure Spring Apps:
az extension add --name spring
Использование фильтров
Фильтры в конфигурации Шлюза 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_LAST
RETAIN_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/name
Location
запроса значение заголовка 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
: допустимое значение SpringHttpStatus
, которое может иметь целочисленное значение, например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
может ограничить запрос от достижения нижестоящей службы, если размер запроса превышает допустимое ограничение.
Эта фабрика принимает следующий параметр конфигурации:
maxSize
DataSize
: тип, в котором значения определяются как число, за которым следует необязательный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 pattern
X-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
: длительность окна в миллисекундах. Кроме того, можно использоватьs
m
суффиксы илиh
суффиксы, чтобы указать длительность в секундах, минутах или часах.partition source
(необязательно): расположение ключа секции (claim
илиheader
IPs
).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"
]
}
]