【问题标题】:Handle different URL patterns in Zuul filters在 Zuul 过滤器中处理不同的 URL 模式
【发布时间】:2019-01-14 21:57:45
【问题描述】:

我有两种类型的 URL 模式,如下所示。

  1. /gateway/secure/api/user/getUser
  2. /gateway/nonsecure/api/user/getUser

(zuul网关应用上下文根为gateway)

使用 zuul 过滤器,我尝试基于securenonsecure URL 模式实现两种不同的逻辑。我编写了一个预过滤器,似乎它甚至没有为上述 URL 模式执行该过滤器。我可以看到网关正在抛出404。当我尝试在没有securenonsecure 的情况下访问微服务时,它按预期工作。以下是我到目前为止所做的属性更改。

下游微服务的上下文根是 api/user

zuul.prefix=/secure
zuul.routes.user.path=/api/user/**
zuul.routes.user.service-id=user

zuul.prefix=/nonsecure
zuul.routes.user.path=/api/user/**
zuul.routes.user.service-id=user

我已经尝试通过提供zuul.prefix 并且似乎前缀设置为全局并且不能仅适用于特定路由。我怎样才能做到这一点?谁能给点建议。谢谢

【问题讨论】:

  • 没有什么全局的可以让你这样做。您需要为每条路线执行此操作。
  • @spencergibb 感谢您的建议。我已经为每条路线添加了上述前缀,并且似乎只采用最后一个前缀。任何想法?我错过了什么吗?
  • zuul.prefix只能有一个

标签: spring-boot microservices spring-cloud gateway netflix-zuul


【解决方案1】:

如您所述,zuul.prefix 属性会影响所有映射,并且只能定义一次。因此,删除 zuul.prefix 属性并为每个 zuul.routes.*.path 属性添加相应的前缀:

zuul.routes.user.path=/secure/api/user/**
zuul.routes.user.service-id=user

zuul.routes.user.path=/nonsecure/api/user/**
zuul.routes.user.service-id=user

注意,根据documentation

zuul.stripPrefix 仅适用于zuul.prefix 中设置的前缀。它对给定路由的path 中定义的前缀没有任何影响。

【讨论】:

  • 在 Web 服务器的帮助下,我能够使用不同的方法来处理这个问题。无论如何感谢@Nicolau 的回答 :)
猜你喜欢
  • 1970-01-01
  • 2017-03-21
  • 2018-10-10
  • 2017-02-09
  • 2019-01-12
  • 1970-01-01
  • 2017-08-23
  • 2017-12-15
  • 2016-07-11
相关资源
最近更新 更多