Безопасность, ограничение тока: фильтрация нелегальной информации на уровне шлюза.
внешний шлюз nginx, шлюз интрасети
nginx можно улучшить с помощью Lua или Kong
концепция
идентификатор: любое имя
uri: адрес прокси-службы. id и uri являются обязательными, предикат и фильтр не являются обязательными.
Предикат: может использоваться для сопоставления URI для доступа к шлюзу. При совпадении текущий маршрут вступит в силу.
Фильтр: экземпляр GatewayFilter, добавляющий логику до или после прокси-сервера, с высочайшей гибкостью.
Процесс обработки
Сначала сопоставление обработчиков обрабатывает URL-адрес, а затем передает его веб-обработчику. Он вызывает первую половину фильтра для обработки. После завершения обработки он вызывает фактическую прокси-службу. После ответа прокси-службы он выполняет логику. второй половины фильтра Верните результат в WebHandler, затем в HandlerMapping и, наконец, клиенту.
Если элементы в списке имеют несколько полей, вам нужно указать «-» и двоеточие для указания каждого поля и значения соответственно. Если поле только одно, вы можете использовать запятые для его разделения;
Конфигурация типа объекта, каждое поле можно настроить с помощью «-» и двоеточия.
Тип карты: ключ, значение, разделенное двоеточием.
predicates:
- Path=/sendOrder
- Query=name,ma.
- name: Query
args:
param: id
regexp: d+
#predicates是List, 它的元素是
public class PredicateDefinition {
@NotNull
private String name;
private Map<String, String> args = new LinkedHashMap<>();}
等号分割转成对象的写法不是yml内置支持的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
предикат
Конфигурация предиката представляет собой список, элементами которого могут быть строки определенного формата или объекты. Метод записи строки: разбивается по знаку равенства, первая часть — это имя имени предиката, вторая часть — args, разделяется запятыми, значение сохраняется в значении карты, автоматически генерируется ключ карты. Метод записи объекта: PredicateDefinition
Если в самих аргументах есть запятые и двоеточия, строковый формат использовать нельзя.
Метод ShortType определяет метод синтаксического анализа параметров args для ConfigClass. DEFAULT: ShortFieldOrder удаляет префикс ShortFieldPrefix и соответствует имени поля ConfigClass. Значение параметра args соответствует значению поля ConfigClass; GATHER_LIST: список, разделенный запятыми; : список, разделенный запятыми, но последний. Значение представляет собой логическое значение, которое в конечном итоге преобразуется в карту из двух ключей. Значение первого ключа — это список перед логическим значением, а второй ключ — это значение. Логическое значение.
Используется для сопоставления запросов на доступ к шлюзу (таких как uri, параметры запроса, заголовки запроса). При совпадении текущий маршрут вступит в силу.
В соответствии с реализацией GatewayPredicate класс реализации создается фабрикой. Фабрика является классом реализации RoutePredicateFactory. Спецификация именования класса реализации: имя предиката+RoutePredicateFactory. Например, Path соответствует PathRoutePredicateFactory.
Имя предиката соответствует префиксу имени класса фабричного класса реализации, а параметр предиката args соответствует фабричному ConfigClass.
Множественные предикатыиОтношение
Если предикат не проходит, шлюз возвращает 404.
Путь
Сопоставление путей, поддержка сопоставления ant и извлечение uriVariables через {}
Запрос
Существует ли соответствующее имя параметра HTTP-запроса. Значение может быть обычным.
имя фиксировано. Запрос, args имеет два значения: param и regexp, соответствующие именам и значениям параметров запроса.
Если настроено только имя, это означает, что пока существует параметр запроса, он будет передан.
Заголовок
ЗаголовокRoutePredicateFactory
Сопоставить имя и значение заголовка запроса. Можно сопоставить только имя. Фактическое значение заголовка запроса может быть множественным. Если имеется одно совпадение, значение конфигурации поддерживает регулярные выражения.
Метод
Соответствует методу HTTP-запроса. Конфигурация должна быть указана заглавными буквами и разделена запятыми.
RemoteAddr
IP-адрес клиента, соответствующий запросу, а точнее IP-адрес последнего сетевого прокси, может быть множественным, разделенным запятыми.
Хозяин
Соответствует значению части хоста в заголовке запроса хоста (за исключением порта). Его может быть несколько, разделенных запятыми, и он может сопоставляться с помощью ant.
Используйте AntPathMatcher для сопоставления, а разделителем путей является «.»
Печенье
Сопоставление имени и значения файла cookie. Значение может регулярно сопоставляться.
Масса
Используется для балансировки нагрузки разных маршрутов. Маршруты в одной группе загружаются по весу.
Вы можете настроить два значения, разделенных запятыми: группировка и вес.
WeightCalculatorWebFilter: при запуске создается двухслойная карта на основе конфигурации веса. Первый уровень — это имя группы, а второй уровень — идентификатор маршрутизации. При поступлении запроса генерируется случайное число от 0 до 1. для каждой группы выбирается идентификатор маршрутизации.
WeightRoutePredicateFactory: при фильтрации по предикатам фильтрация на основе идентификатора группы и маршрута.
фильтр
Способ записи конфигурации такой же, как и предикат. Способ записи строки: разделить по знаку равенства. Первая часть соответствует префиксу имени класса фабрики фильтров GatewayFilterFactory, а вторая часть является параметром.
Фильтры используются для изменения запросов и ответов.
ДобавитьЗаголовокЗапроса
Добавьте заголовки запросов, которые может получить бэкэнд.
Значение заголовка запроса поддерживает динамическое получение из uriVariables.
StripPrefix
Существует только одно целочисленное значение n. После разделения запрошенного пути на «/» удалите префикс n.
Ограничение
Междоменный домен
spring.cloud.gateway.globalcors:
cors-configurations:
'[/**]':#跨域的uriPattern
allowedHeaders: "*"
allowedOrigins: "*"
allowedMethods:
- POST
- OPTIONS
- GET
1
2
3
4
5
6
7
8
9
Сервер определяет, является ли это междоменный запрос, по тому, совпадают ли заголовок запроса Origin и схема, хост и порт URL-адреса запроса. Если есть одно различие, это междоменный запрос.
Должна быть междоменная конфигурация, и запрошенный uri соответствует uriPattern междоменной конфигурации. Шлюз определит, является ли она междоменной, он разрешит междоменные заголовки запросов. источники, методы запроса и фактические запросы в междоменной конфигурации. Совпадают ли заголовок запроса, источник и метод запроса. Если они все совпадают, запустите междоменный доступ, в противном случае верните 403Forbiden.
Поддерживает получение идентификатора службы посредством обнаружения службы и автоматически генерирует конфигурацию маршрутизации на основе идентификатора службы.URI конфигурации маршрута по умолчанию — lb://serviceId, предикат — /serviceId/**, а фильтр — Rewritepath для удаления serviceId.
глобальный фильтр
ReactiveLoadBalancerClientFilter
Чтобы обработать URI маршрутизации с помощью схемы lb, сначала получите экземпляр службы в соответствии с именем службы через ServiceInstanceListSupplier, а затем выполните балансировку нагрузки через экземпляр ReactorLoadBalancer.
RouteToRequestUrlFilter
Сделайте 2 вещи: 1. Поддержите двухуровневые схемы, сохраните внешнюю схему в GATEWAY_SCHEME_PREFIX_ATTR, а затем удалите ее. 2. Используйте внутреннюю схему, хост и порт, чтобы заменить фактически запрошенный URI для достижения пересылки.