Я создаю мультитенантное приложение, в котором имя арендатора содержится в каждом 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