Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 9128|Отговор: 0

[Източник] Фабрики за филтри, вградени в Spring Cloud Gateway

[Копирай линк]
Публикувано в 7.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 Полезен товар твърде голям
Размерът на пакета за заявка е в байтове, а стойността по подразбиране е 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 се получава чрез заявка на -> Gateway -> микроуслуга, ще бъде така:


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 Header. Пример за конфигурация:


Ако не е зададено, тогава заглавието Host ще се контролира от Http клиента

9、RequestRateLimiter GatewayFilter Factory

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


10、RedirectTo GatewayFilter Factory

Пренасочете оригиналната заявка към посочения URL, пример за конфигурация:


Тази конфигурация прави достъпа до ${GATEWAY_URL}/hello пренасочен към https://acme.org/hello , и да носиш единLocation:http://acme.orgHeader, докато HTTP статусният код, който връща клиента, е 302

Бележки:

HTTP статусният код трябва да е 3xx, например 301

URL адресът трябва да е легитимен URL, който служи като стойност на Location Header

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-опции
  • Политика за препращане
  • Съдържателна сигурност-политика
  • опции за изтегляне
  • Разрешени крос-домейн-политики


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


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

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、Опитайте GatewayFilter Factory

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


Следните параметри могат да бъдат конфигурирани:

  • повторения: Броят на повторните опити
  • statuses: Кодът на статуса, който трябва да бъде преразгледан, зададен в org.springframework.http.HttpStatus
  • методи: Методът на заявка, който трябва да бъде изпробван отново, със стойност в org.springframework.http.HttpMethod
  • series:HTTP статус кодова последователност, със стойност в org.springframework.http.HttpStatus.Series


23、RequestSize GatewayFilter Factory

Задайте размера на максималния брой позволени пакети за заявка, пример за конфигурация:


Ако размерът на пакета за заявка надвиши зададената стойност, се връща товар 413 Твърде голям заедно с съобщение за грешка

24、Модификация на заявка за тяло GatewayFilter Factory

Променете оригиналното съдържание на тялото на заявката преди препращане на заявката, фабриката за филтри може да бъде конфигурирана само чрез код, не в конфигурационния файл. Пример за код:


Съвети: Тази фабрика за филтри е в BETA състояние и API може да се промени в бъдеще.Моля, използвайте производствената среда с повишение

25、Модифицирай Response Body GatewayFilter Factory

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


Съвети: Тази фабрика за филтри е в BETA състояние, API може да се промени в бъдеще, моля, използвайте го с внимание в продукционната среда

26、По подразбиране филтри

Default Filters се използва за добавяне на фабрика за филтри към всички маршрути, тоест за преминаванеФабриката за филтри, конфигурирана от Default Filter, ще се прилага за всички маршрути。 Пример за конфигурация:


(Край)




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

Mail To:help@itsvse.com