Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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-коди статусу, які можуть бути числами або рядками
Префікс Strip
Використовується для обрізання шляху початкового запиту
Використовуйте числа для позначення кількості шляхів, які потрібно обрізати
Повторити
Спробуйте ще раз для різних відповідей
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

Знайомимося з захистом автоматичних вимикачів маршрутів від 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 має бути легітимною, яка слугує значенням заголовка Location

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-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、Модифікація Response Body GatewayFilter Factory

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


Поради: Ця фабрика фільтрів перебуває у стані BETA, API може змінитися в майбутньому, будь ласка, використовуйте його обережно у виробничому середовищі

26、Default Filters

Default Filters використовується для додавання фабрики фільтрів до всіх маршрутів, тобто для проходженняФабрика фільтрів, налаштована Default Filter, застосовується до всіх маршрутів。 Приклад конфігурації:


(Кінець)




Попередній:Логи Docker заповнюють диски та міграцію даних
Наступний:Java-динамічно сплайсовані SQL-оператори запобігають ін'єкції бази даних
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com