Можно ли настроить маршруты Zuul для совпадения с подстановочными знаками? - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю мультитенантное приложение, в котором имя арендатора содержится в каждом URL.Например, маршрут для извлечения всех текущих пользователей арендатора «Тест» будет выглядеть следующим образом: /ui/api/Test/users.Часть приложения, над которой я сейчас работаю, - это клиент, который перенаправляет запросы любого другого приложения, которое он поддерживает, в мою службу БД, позволяя клиенту выступать в качестве посредника.

Возможно, вы увидите, гдеэто идетЯ использую Zuul для пересылки моих маршрутов, но не ВСЕ маршруты должны пересылаться таким образом.Иногда внешний интерфейс отправляет запросы, начинающиеся с /ui/api/, которые не являются запросами к базе данных.Допустим, один из них выглядит следующим образом: /ui/api/Test/Foo.Я хочу настроить маршруты Zuul таким образом, чтобы я мог перенаправить любой URL, соответствующий шаблону /ui/api/*/users (где * любая строка), без переадресации других.

Я, конечно, пыталсяпросто используйте /ui/api/*/users, но это не будет соответствовать ни одному маршруту.Я не пробовал это, но я предполагаю, что это просто интерпретирует * как фактическую часть URL.Мой текущий обходной путь должен соответствовать /ui/api/** и затем добавить **/Foo к zuul.ignoredPatterns.Это работает, но является оптимальным, поскольку любая новая конечная точка, которую я требую, чтобы она не пересылалась, должна быть добавлена ​​здесь.Поскольку клиент предназначен для использования в различных проектах, перенаправленные маршруты не будут меняться, а те, которые не должны быть, будут.Это не настраивается для каждого проекта и, следовательно, не является жизнеспособным решением.

Вот как выглядит соответствующая часть моего application.properties:

zuul.ignoredPatterns = /**/login,/**/executeJobUrl,/**/createExecuteJobUrl

zuul.routes.user-manager.path = /ui/api/**
zuul.routes.user-manager.url = http://localhost:0/eis-user-manager/ui/api
zuul.routes.user-manager.stripPrefix = true

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Рабочим решением является использование ** в шаблоне.Так что это будет

 /ui/api/**/users

Я получил идею от здесь .Также поблагодарите Алекса Эггерса за тестирование и предложение ответить.

0 голосов
/ 12 февраля 2019

У меня есть несколько маршрутов, работающих с частичными подстановочными знаками, в качестве решения проблемы, аналогичной описанной вами.Я не мог заставить работать путь типа /api/**/v1.1/user**, но /api/*admin/v1.1/user** работает нормально.Я пришел к выводу, что один подстановочный знак был слишком жадным ...

Единственное, но это то, что вам нужно называть свои службы как-то вроде "somecompanyadmin", "msadmin" и "someothercompanyadmin" вместо "somecompany", "ms"и" someothercompany "...

Вот пример конфигурации, которая подходит для моего случая:

zuul:
  routes:
    mock:
      path: /v1.1/**
      url: https://myserver:6154/v1.1
    users:
      path: /api/*admin/v1.1/user**
      serviceId: user_server
      stripPrefix: true
    permission:
      path: /api/*admin/v1.1/permission/**
      serviceId: permission_server
      stripPrefix: true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...