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