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

Вид: 9128|Ответ: 0

[Источник] Фабрики фильтров, встроенные в Spring Cloud Gateway

[Скопировать ссылку]
Опубликовано 07.02.2022 13:36:49 | | |
Встроенный завод фильтров

Вот простая таблица со всеми фильтрующими фабриками, встроенными в Spring Cloud Gateway, которая не очень подробна, но её можно использовать как быстрый обзор. Следующим образом:

Фабрика фильтров
функция
параметр
AddRequestHeader
Добавить заголовок к исходному запросу
Название и значение заголовка
AddRequestParameter
Добавьте параметры запроса к исходному запросу
Имя и значение параметра
AddResponseHeader
Добавьте заголовок к исходному ответу
Название и значение заголовка
DedupeResponseHeader
Отклоняет дублирующиеся значения в заголовке ответа
Имя заголовка и стратегия дедупликации, которые необходимо дедупликация
Гистрикс
Введите защиту от автоматического выключателя Hystrix для маршрута
Название HystrixCommand
FallbackHeaders
Добавьте конкретную информацию об исключениях в заголовок запроса fallbackUri
Имя Хедера
PrefixPath
Добавьте префикс к исходному пути запроса
Путь префикса
PreserveHostHeader
Добавьте свойство preserveHostHeader=true в запрос, которое фильтр маршрутизации проверяет, чтобы решить, хотите ли вы отправить исходный хост
не
RequestRateLimiter
Используемый для ограничения запросов, алгоритм троттлинга является ведром токенов
keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatus
Перенаправление
Перенаправьте исходный запрос на указанный URL
HTTP-код статуса и URL перенаправления
RemoveHopByHopHeadersFilter
Удалить серию заголовков, предписанных организацией IETF для первоначального запроса
Это включено по умолчанию, и вы можете указать, какие заголовки удалить через конфигурацию
RemoveRequestHeader
Удалить заголовок исходного запроса
Название заголовка
RemoveResponseHeader
Удалите заголовок исходного ответа
Название заголовка
RewritePath
Перепишите исходный путь запроса
Исходный регекс пути и регекс переписанного пути
RewriteResponseHeader
Перепишите заголовок в исходном ответе
Имя заголовка, регулярное выражение значения, переписанное значение
SaveSession
Принудительно выполнить операцию WebSession::save перед пересылкой запроса
не
secureHeaders
Добавьте серию заголовков ответов, которые служат защитой исходного ответа
Нет, вы можете изменить значения этих заголовков отклика безопасности
SetPath
Изменить исходный путь запроса
Модифицированный путь
SetResponseHeader
Измените значение заголовка в исходном ответе
Название заголовка, изменённое значение
SetStatus
Изменить статус исходного ответа
HTTP-коды статуса, которые могут быть числами или строками
Стриппрефикс
Используется для усечения пути исходного запроса
Используйте числа для обозначения количества путей, которые нужно урезать
Снова пробовать
Попробуйте повторить для разных ответов
retries、statuses、methods、series
RequestSize
Установите размер максимального количества запрошенных пакетов, которые разрешено принимать. Если размер пакета запроса превышает установленное значение, возвращается 413 Payload Too Large
Размер пакета запроса — в байтах, а значение по умолчанию — 5M
ModifyRequestBody
Измените оригинальное содержание тела запроса перед пересылкой запроса
Содержимое модифицированного тела запроса
ModifyResponseBody
Измените содержимое исходного тела ответа
Содержимое модифицированного отклика
По умолчанию
Добавьте фильтры для всех маршрутов
Название и стоимость завода фильтров

Советы: каждая фабрика фильтров соответствует классу реализации, и вот этиНазвание класса должно заканчиваться на GatewayFilterFactoryЭто конвенция Spring Cloud Gateway, например, класс реализации, соответствующий AddRequestHeader, называется AddRequestHeaderGatewayFilterFactory. Друзья, заинтересованные в исходном коде, могут склеивать имена отдельных классов согласно этому правилу, чтобы найти код реализации этих встроенных фильтров.

1、AddRequestHeader GatewayFilter Factory

Добавьте заголовок к исходному запросу, пример конфигурации:


Добавьте заголовок запроса X-Request-Foo с значением Bar к исходному запросу

2、AddRequestParameter GatewayFilter Factory

Добавьте параметры и значения запроса к исходному запросу, пример конфигурации:


Добавьте параметр foo с значением bar к исходному запросу, то есть: foo=bar

3、AddResponseHeader GatewayFilter Factory

Добавьте заголовок к исходному ответу, пример конфигурации:


Добавьте заголовок ответа X-Request-Foo с значением Bar к исходному ответу

4、DedupeResponseHeader GatewayFilter Factory

DedupeResponseHeader может удалять дублирующиеся значения в ответных заголовках на основе настроенного имени заголовка и политики дедупликации, что является новой функцией, предоставленной Spring Cloud Greenwich SR2, и не может использоваться в этой версии.

МыЕсли заголовок CORS (Solving Cross-Domain) установлен как на шлюзе, так и на микросервисе, если конфигурация не выполнена, то значение заголовка CORS получается при запросе микросервиса -> шлюза ->, это будет так:


Access-Control-Allow-Credentials: true, true
Access-Control-Allow-Origin: https://musk.mars, https://musk.mars
Вы видите, что значения этих двух заголовков дублированы, если вы хотите дедупликацию значений этих двух заголовков, вам нужно использовать DedupeResponseHeader, пример конфигурации:

Стратегия дедупликации:

  • RETAIN_FIRST: По умолчанию, сохраняю первое значение
  • RETAIN_LAST: Оставьте последнее значение
  • RETAIN_UNIQUE: Сохранять все уникальные значения в порядке их появления


Если вы хотите получить более полное понимание фабрики фильтров, рекомендуется ознакомиться с исходным кодом фабрики фильтров, так как исходный код содержит подробные примечания и примеры, что лучше, чем официальная документация: org.springframework.cloud.gateway.filter.factory.DedupeResponseHeaderGatewayFilterFactory

5、Hystrix GatewayFilter Factory

Представляем защиту от автоматических выключателей маршрутов от Hystrix, пример конфигурации:


Hystrix — первое поколение отказоустойчивых компонентов Spring Cloud, но оно перешло в режим обслуживания, и в будущем Hystrix будет удалён Spring Cloud, заменённый Alibaba Sentinel/Resilience4J. Поэтому эта статья не будет вдаваться в подробности, если вам интересно, вы можете ознакомиться с официальной документацией: Hystrix GatewayFilter Factory

6、FallbackHeaders GatewayFilter Factory

Также поддерживая Hystrix, фабрика фильтров, описанная в предыдущем разделе, поддерживает параметр конфигурации: fallbackUri, который используется для пересылки запросов на конкретный URI при возникновении исключения. Фабрика фильтров FallbackHeaders может добавить заголовок при пересылке запроса в URI, и значение этого заголовка — это конкретная информация об исключениях. Пример конфигурации:


Я не буду вдаваться в подробности, если интересно, можете обратиться к официальной документации: FallbackHeaders GatewayFilter Factory

7、PrefixPath GatewayFilter Factory

Добавьте префиксный путь к исходному пути запроса, пример конфигурации:


Эта конфигурация делает визит на ${GATEWAY_URL}/hello переадресирован наhttps://example.org/mypath/hello

8、PreserveHostHeader GatewayFilter Factory

Добавьте свойство preserveHostHeader=true в запрос, которое фильтр маршрутизации проверяет, чтобы решить, отправлять ли исходный заголовок хоста. Пример конфигурации:


Если он не установлен, то заголовок с названием Host будет управляться Http-клиентом

9、RequestRateLimiter GatewayFilter Factory

Он используется для ограничения запросов, а алгоритм ограничения является ведром токенов. Пример конфигурации:


10、RedirectTo GatewayFilter Factory

Перенаправьте исходный запрос на указанный URL, пример конфигурации:


Эта конфигурация делает доступ к ${GATEWAY_URL}/hello перенаправленным на https://acme.org/hello , и несут одинLocation:http://acme.orgЗаголовок, тогда как HTTP-код, возвращающий клиента, — 302

Примечания:

Статус HTTP-код должен быть 3xx, например, 301

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

11、RemoveHopByHopHeadersFilter GatewayFilter Factory

Для первоначального запроса на удаление серии заголовков, указанных организацией IETF, по умолчанию удалённые заголовки выглядят следующим образом:


  • Связь
  • Держи в живых
  • Прокси-аутентификация
  • Прокси-авторизация
  • TE
  • Прицеп
  • Трансферное кодирование
  • Модернизировать


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


12、RemoveRequestHeader GatewayFilter Factory

Чтобы убрать заголовок исходного запроса, настройте пример:


Удалите заголовок запроса X-Request-Foo из исходного запроса

13、RemoveResponseHeader GatewayFilter Factory

Чтобы убрать заголовок исходного ответа, настройте пример:


Удалите заголовок ответа с названием X-Request-Foo из исходного ответа

14、RewritePath GatewayFilter Factory

Переопределение исходного пути запроса регулярным выражением, пример конфигурации:


Эта конфигурация позволяет получить доступ к /foo/bar для переписки пути к /bar и пересылки его, то есть пересылки на https://example.org/bar。 Обратите внимание, что из-за синтаксиса YAML вместо $ нужно использовать $\

15、RewriteResponseHeader GatewayFilter Factory

Перепишите заголовок в исходном ответе, пример конфигурации:


Значимость этой конфигурации заключается в том, что если значение X-Response-Foo в заголовке ответа равно /42?user=ford&password=omg!what&flag=true, то оно будет перезаписано в /42?user=ford&password=***&flag=true согласно заданному значению, то есть password=omg!what будет перезаписан в password=***

16、SaveSession GatewayFilter Factory

Перед пересылкой запроса выполните пример конфигурации операции WebSession::save:


Он в основном используется для отложенного хранения данных (данные не сохраняются сразу), как Spring Session, и стремится обеспечить сохранение состояния сессии до пересылки запроса. Если вы интегрируете Spring Secutiry в Spring Session и хотите убедиться, что вся информация о безопасности передаётся на последующие машины, вам нужно настроить этот фильтр.

17、secureHeaders GatewayFilter Factory

Фабрика фильтров secureHeaders в основном основана на рекомендациях из этого блога, добавляя серию заголовков ответов, которые играют роль безопасности в исходном ответе. По умолчанию добавляются следующие заголовки (включая значения):


  • X-Xss-Protection:1; mode=block
  • Strict-Transport-Security:max-age=631138519
  • X-Frame-Options:DENY
  • X-Content-Type-Options:nosniff
  • Referrer-Policy:no-referrer
  • Content-Security-Policy:default-src 'self' https:; font-src 'self' https: data:; img-src 'self' https: data:; object-src 'none'; script-src https:; style-src 'self' https: 'unsafe-inline'
  • X-Download-Options:noopen
  • X-Permitted-Cross-Domain-Policies:none


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

  • xss-protection-header
  • строгая транспортная безопасность
  • Варианты кадров
  • Content-type-options
  • Политика реферера
  • Контент-безопасность-политика
  • Опции для скачивания
  • разрешённые-междоменные политики


Пример конфигурации:


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

18、SetPath GatewayFilter Factory

Измените исходный путь запроса и настройте пример:


Эта конфигурация позволяет переадресовать данные на ${GATEWAY_URL}/foo/bar при доступеhttps://example.org/bar , то есть оригинальный /foo/bar был заменён на /bar

19、SetResponseHeader GatewayFilter Factory

Измените значение заголовка в исходном ответе, настройте пример:


Измените значение X-Response-Foo в исходном ответе на Bar

20、SetStatus GatewayFilter Factory

Изменить статус исходного ответа, пример конфигурации:


Значение SetStatusd может быть как числом, так и строкой. Но это должно быть значение в классе перечисления Spring HttpStatus. Обе вышеуказанные конфигурации могут возвращать HTTP-код статуса 401.

21、StripPrefix GatewayFilter Factory

Для усечения пути исходного запроса пример конфигурации:


Как показано в приведённой выше конфигурации, если запрошенный путь — /name/bar/foo, то он будет усечен до /foo и переадресирован, то есть будет усечён 2 пути.

22、Retry GatewayFilter Factory

Повторите для разных ответов, например, для HTTP-кодов статуса, пример конфигурации:


Можно настроить следующие параметры:

  • повторные попытки: количество повторных попыток
  • statuses: Код, который нужно перепроверить, установленный в org.springframework.http.HttpStatus
  • методы: Метод запроса, который нужно повторить, со значением org.springframework.http.HttpMethod
  • последовательность статусного кода series:HTTP, со значением org.springframework.http.HttpStatus.Series


23、RequestSize GatewayFilter Factory

Установите размер максимального количества разрешенных для получения пакетов запросов, пример конфигурации:


Если размер пакета запроса превышает установленное значение, возвращается 413 Payload Too Large вместе с сообщением об ошибке

24、Modify Request Body GatewayFilter Factory

Измените оригинальное содержимое тела запроса перед пересылкой, фабрика фильтров может быть настроена только по коду, а не в конфигурационном файле. Пример кода:


Советы: эта фабрика фильтров находится в состоянии BETA, и API может измениться в будущем.Пожалуйста, используйте производственную среду с осторожностью

25、Модификация откликательного тела GatewayFilter Factory

Фабрика фильтров также может использоваться для изменения содержимого исходного тела ответа, и фабрика фильтров может быть настроена только по коду, а не в конфигурационном файле. Пример кода:


Советы: эта фабрика фильтров находится в состоянии BETA, API может измениться в будущем, пожалуйста, используйте его с осторожностью в производственной среде

26、Default Filters

Default Filters используется для добавления фабрики фильтров ко всем маршрутам, то есть для передачиЗавод фильтров, настроенный фильтром по умолчанию, будет применяться ко всем маршрутам。 Пример конфигурации:


(Конец)




Предыдущий:Логи Docker заполняют диски и миграцию данных
Следующий:Java-динамически склеенные SQL-операторы препятствуют инъекции базы данных
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com