为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥9229398 2022-06-15 15:41:11
我正在构建一个多租户应用程序,其中租户名称包含在每个 url 中。例如,检索租户“Test”的所有当前用户的路由如下所示/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,/**/createExecuteJobUrlzuul.routes.user-manager.path = /ui/api/**zuul.routes.user-manager.url = http://localhost:0/eis-user-manager/ui/apizuul.routes.user-manager.stripPrefix = true
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

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

 /ui/api/**/users

我从这里得到了这个想法。还要感谢 Alex Eggers 的测试并建议做出答案。


查看完整回答
反对 回复 2022-06-15
?
动漫人物

TA贡献1815条经验 获得超10个赞

我有一些使用部分通配符的路线,作为与您描述的类似问题的解决方案。我找不到像/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


查看完整回答
反对 回复 2022-06-15
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信