在 Zuul 过滤器中处理不同的 URL 模式

Posted

技术标签:

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

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

    /gateway/secure/api/user/getUser /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只能有一个 【参考方案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 的回答 :)

以上是关于在 Zuul 过滤器中处理不同的 URL 模式的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Eureka Netflix zuul 过滤器

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

第六章API服务网关(Zuul) 下

(34)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Zuul过滤器介绍及使用(传递数据拦截请求和异常处理)

sprignclou的zuul的实战

Zuul过滤器复制流量