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 для обоих

Другие вопросы по тегам