我正在构建一个多租户应用程序,其中租户名称包含在每个URL中。例如,检索租户“Test”的所有当前用户的路由如下所示:/ui/api/Test/users
。我目前正在处理的应用程序部分是一个客户端,它将其支持的任何其他应用程序的请求转发给我的数据库服务,允许客户端充当中间人。
你可能会看到它的发展方向。我使用Zuul转发我的路线,但不是所有路线都应该以这种方式转发。有时,前端会发送以/ui/api/
开头但不是数据库请求的请求。让我们说其中一个看起来像这样:/ui/api/Test/Foo
。我希望能够以这样的方式配置我的Zuul路由:我可以转发任何符合模式/ui/api/*/users
的URL(其中*是任何字符串)而不转发任何其他URL。
我当然试图简单地使用/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
我有一些使用部分通配符的路由,作为解决类似问题的解决方案。我无法像/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