Spring Cloud Gateway, вы можете исключить пути (сделать глобальный!=)
Я надеюсь, что кто-то может дать некоторые идеи здесь. Я играю с некоторыми примерами приложений для весеннего облачного шлюза и перебираю документы, но я не вижу пути к самосовершенствованию или глобальному игнорированию. Идея здесь заключается в том, что есть некоторые пути, которые ВСЕГДА должны указывать на себя, например, для привода, и другие, которые могут нуждаться в глобальном блоке (возможно, по соображениям безопасности, например, вы обнаружили серьезную уязвимость и должны отключить доступ к конкретный ресурс). Прямо сейчас из того, что я могу сказать, нет способа сделать это, но я надеюсь, что я ошибаюсь!
Я настроил приложение с приводом, работающим на порту 8081, и сервером на 8080. У меня есть два простых правила:
- id: local_test_1
uri: http://localhost:80
order: 9000
predicates:
- Path=/echo
# =====================================
- id: local_test_2
uri: ${test.uri}
order: 10000
predicates:
- Path=/**
Но универсальный /** гарантирует, что любой вызов localhost:8081/activator/* также будет направлен на URI. Как я могу освободить порт управления от правил маршрутизации, чтобы сам сервер обрабатывал запрос?
Я думал, что фильтр по умолчанию, такой как - Path!=${Management.server.port}/*, может работать, но кажется, что! = Не поддерживается.
4 ответа
Я столкнулся с той же проблемой при использовании маршрута по умолчанию, но мне также нужно было обслуживать пользовательскую страницу после выхода из пути к классам. Маршрут по умолчанию будет обрабатывать запрос вместо самого шлюза. Без маршрута по умолчанию
В итоге я переместил маршрут по умолчанию на Java-бин и использовал свободный API следующим образом:
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
return builder.routes()
.route("default", r -> r
.order(Ordered.LOWEST_PRECEDENCE)
.path("/**")
.and().not(p -> p.path("/logout.html", "/logout.css"))
.uri("http://localhost:8080")
)
.build();
}
Если кто-то знает способ сделать отрицание в файлах конфигурации .yml, это было бы идеально, но мне еще предстоит найти пример этого в какой-либо документации.
Вы можете использовать no://op
как значение для uri:
,
Единственный недостаток, который я вижу, заключается в том, что любая конечная точка, которая не должна быть найдена (например, /actuator/foo
) все равно вернет 200 ок.
- id: local_test_1
uri: http://localhost:80
order: 9000
predicates:
- Path=/echo
# =====================================
- id: local_test_2
uri: ${test.uri}
order: 10000
predicates:
- Path=/**
Попробуй добавить два пробела перед - Path
, проблема может быть, ваш конфиг не работает.
Может ты сможешь использовать
- Path=/**
и
- setStatus=404
для его фильтра и для маршрута привода
- Path=/actuator/**
и
- setStatus=ACCEPTED
не забывай
uri: no://op
для обоих