Вбудована фабрика фільтрів
Ось проста таблиця всіх фабрик фільтрів, вбудованих у 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 отримується шляхом запиту мікросервісу -> шлюзу ->, це буде так:
Ви бачите, що значення цих двох заголовків дублюються, якщо хочете дедуплікувати значення цих двох заголовків, потрібно використовувати 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, застосовується до всіх маршрутів。 Приклад конфігурації:
(Кінець)
|