zuul API 网关过滤器

Posted

技术标签:

【中文标题】zuul API 网关过滤器【英文标题】:zuul API Gateway Filter 【发布时间】:2017-08-23 08:03:43 【问题描述】:

当我尝试从 zuul 预过滤器访问另一个 REST API(在 ZUUL 路由中注册)时,我遇到了问题,调用变得递归,即它一次又一次地运行我的预过滤器代码。我的用例如下-

    在 Zuul PreFilter run() 方法中,我正在验证标头中传递的令牌。

    验证令牌后,我正在调用一项休息服务(用户位置服务)来获取用户详细信息。我的用户定位服务本身在 ZUUL 中注册如下:

    user-location-service:
      path: /userLocationService/**
      url: http://localhost:9002
    

问题是 JWT 令牌验证代码一次又一次地运行,您能否提出一些解决方案,我可以应用调用 Userlocation 服务,这样PreFilter 代码就不会一次又一次地运行?

【问题讨论】:

你能告诉我为什么你使用预过滤器进行验证。您使用的是 OAuth 2.0 吗? 没有 Thamira...我们在预过滤器中仅验证 JWT 令牌。 baeldung.com/spring-security-oauth-jwt 【参考方案1】:

您的用户定位服务已在 Zuul 中注册。因此,当您陷入无限循环时,您的过滤器将一直被执行。

这里有两种方法:

不要再传到网关,直接调用用户定位服务 或者,在您的 ZUll 身份验证过滤器中创建一个过滤器规则,以不考虑用户位置服务。您可以使用 URL 路径上下文来排除要执行的路由

【讨论】:

感谢您的回复拉斐尔。是的,您是对的,我们选择了第一个选项作为我们的解决方案。 当我们使用 1st 时,我们不使用动态托管。【参考方案2】:

您需要允许sensitiveHeaders。

     zuul:
        routes:
            resource:
                path: /resource/**
                url: http://localhost:8002/
                sensitiveHeaders: Cookie,Set-Cookie

【讨论】:

这里的问题是 zuul 不允许发送授权标头。 sensitiveHeaders 授予该权限。

以上是关于zuul API 网关过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Zuul 路由网关

Spring Cloud入门教程 - Zuul实现API网关和请求过滤

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

API网关组件:Zuul2.0新特性

第四篇:路由网关(zuul)

SpringCloud路由网关Zuul