在 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 过滤器,我尝试基于secure
和nonsecure
URL 模式实现两种不同的逻辑。我编写了一个预过滤器,似乎它甚至没有为上述 URL 模式执行该过滤器。我可以看到网关正在抛出404
。当我尝试在没有secure
或nonsecure
的情况下访问微服务时,它按预期工作。以下是我到目前为止所做的属性更改。
下游微服务的上下文根是 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路由网关的过滤器和异常处理
(34)java Spring Cloud+Spring boot+mybatis企业快速开发架构之SpringCloud-Zuul过滤器介绍及使用(传递数据拦截请求和异常处理)