是否可以配置Zuul路由以匹配通配符?

问题描述 投票:2回答:2

我正在构建一个多租户应用程序,其中租户名称包含在每个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
java spring multi-tenant netflix-zuul
2个回答
1
投票

工作解决方案是在模式中使用**。所以它会

 /ui/api/**/users

我从here得到了这个想法。还要感谢Alex Eggers进行测试并建议做出回答。


1
投票

我有一些使用部分通配符的路由,作为解决类似问题的解决方案。我无法像/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
© www.soinside.com 2019 - 2024. All rights reserved.