问题标签 [spring-cloud-gateway]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
743 浏览

spring-cloud - 如何在 Spring Cloud Gateway 中为 IOExceptions 配置重试?

我看到重试过滤器支持基于 http 状态代码的重试。我想在连接重置等io异常的情况下配置重试。Spring Cloud Gateway 2 有可能吗?

0 投票
0 回答
1070 浏览

spring-cloud - Spring Cloud Gateway Redis RateLimiter 示例

我有一个用例,我必须通过该消息中的字段预先过滤一个肥皂请求,并添加一个基于 IP 的速率限制器到该路由。我正在使用 Spring Cloud Gateway 2.0.0.RC2。
我使用 readBody() 方法来预过滤soap请求,但我不知道如何向这条路由添加速率限制器 @Bean public RouteLocator wsRouteLocator(RouteLocatorBuilder builder, RequestRateLimiterGatewayFilterFactory rl) { return builder.routes() .route(r -> r.path("/services/**") .and() .readBody(String.class, s -> { try { // Verify xml message } catch (XPathExpressionException e) { e.printStackTrace(); return false; } }) .uri("http://10.60.96.56:9444") ) .build();

我找到了使用 Spring Cloud 2.0.0.M4的指南。不幸的是,我在 Gateway 2.0.0.M4 中找不到 readBody() 方法。有人可以向我展示如何在 Spring Cloud Gateway 中使用 RateLimiter 吗?

0 投票
1 回答
5098 浏览

spring-boot - spring-cloud-gateway RewritePath GatewayFilter 不起作用

我正在开发一个 spring-cloud-gateway 应用程序。我在哪里使用 RewritePath GatewayFilter 来处理一些pathvariable. 以下是我在端口 80上运行的下游 api 。

在我的网关应用程序中,过滤器配置如下:

但它不起作用。我做错了什么?我收到以下日志。

主要是路径变量没有被重写。有什么帮助吗?

0 投票
1 回答
887 浏览

architecture - Api 网关职责:良好实践(授权、请求转换)

我正在考虑在我的微服务之上使用 api 网关。但是有一些架构问题我没有明确的答案,所以我想从社区获得意见。如果你能分享你对好的和坏的做法的想法,那也很棒。因此,为了使这个问题帖子易于阅读,我有两个主要部分“问题”和“详细信息”

问题

Api网关应该负责授权和请求转换吗?

问题主要是,什么是网关:它只是 api 用户和微服务之间的桥梁。还是微服务的版主?请参阅“网关实施策略”部分了解更多信息。

在使用 Amazon API Gateway 的情况下,使用额外的 lambda 函数层对请求进行转换和授权是一种好习惯吗?

如果我选择使用 Amazon API Gateway,那么对上一个问题的回答将是“网关应该充当微服务的主持人”。比我需要通过 Amazon lambdas 处理请求/响应转换和授权,这意味着我将在网关下方有另一层。所以问题是:拥有这种架构是一种好习惯吗?

细节

技术

  • 春季启动 2.0
  • 智威汤逊
  • Spring Cloud GatewayAmazon Api Gateway(取决于答案)

服务

我们的系统中有以下微服务

服务A

端点 GET /api/resources/{dataId}/admin-endpoint

标头 - 授权:不记名令牌

此端点只能由具有 ADMIN 角色的用户访问(如果来自没有该角色的用户的请求,将返回 403 http 状态和响应)。

请注意,在处理请求之前,令牌必须由 AuthService 验证。并且在处理请求后(在非错误http状态的情况下)令牌必须由AuthService刷新(响应必须包含刷新的令牌)

端点 GET /api/resources/{dataId}/user-endpoint

标头 - 授权:不记名令牌

具有任何角色的用户都可以访问此端点

身份验证服务

端点 POST /api/auth/login

标头 - 授权:不记名令牌

正文 - {“用户名”:字符串,“密码”:字符串}

验证用户:在成功的情况下,签名的授权令牌将作为响应的标头(不记名 JWT 令牌)返回。如果认证失败,将返回 401 http 状态

端点 POST /api/auth/logout

标头 - 授权:不记名令牌

使授权令牌无效(通过将令牌存储在适当的表中),以便用户无法使用给定令牌访问受保护的 API

端点 GET /api/auth/validate

标头 - 授权:不记名令牌

验证给定令牌(必须在 ServiceA 中处理请求之前调用。有关验证检查,请参见附录 A

响应正文 - {“角色”:,“用户名”:字符串}

网关实施策略

网关只负责路由

使用此策略 ServiceA 和 AuthService 在网关中注册为路由,在处理请求之前无需进行额外的请求转换。

ServiceA 直接与 AuthServer 对话以进行授权和令牌验证。

优点

  • 网关逻辑非常简单
  • 作为网关,有多种框架和工具可供选择。

缺点

  • ServiceA 和 AuthService 强耦合
  • 如果我需要添加 ServiceB,那么我需要做一些双重工作来建立 ServiceB 和 ServiceA 之间的通信
  • 处理 AuthService 中的失败主要由 ServiceA 完成

Gateway负责授权和请求转换

使用此策略,api-gateway 将在将请求传递给 ServiceA 之前使用 AuthServer 处理令牌验证。当 ServiceA 给出非错误响应时,它也会处理令牌刷新

优点

  • ServiceA 与 AuthService 完全解耦
  • 添加另一个 ServiceB 会容易得多
  • AuthService 失败由网关处理

缺点

  • 网关将承担更多的责任,而不仅仅是作为微服务的桥梁
  • Amazon Api Gateway 很可能不是一个好的选择,因为使用 Amazon lambda-s 处理授权和转换可能非常痛苦(也许我错了)

附录 A:JWT 令牌验证检查

  • 令牌具有有效的承载前缀:“承载”
  • 令牌未过期(令牌有createdAt属性,用于判断令牌是否超过10分钟)
  • 用户存在:创建token后用户没有被删除(token有subject属性,保持用户的唯一标识)
  • 在令牌生命周期内未更改用户密码
0 投票
0 回答
591 浏览

spring-boot - 春天云网关|| 需要配置全局和应用程序级别和api级别超时

我正在一个spring-cloud-gateway项目中工作。我需要配置全局超时/应用程序级超时和特定于 api 的超时。以下是我的下游 API:

此 API 作为下游服务运行。现在以下是我在我的所有这些 API 的路由配置gateway-application

现在应用程序级别超时和 api 级别超时工作正常,但我没有任何方法来定义全局超时过滤器。相同的文档尚不可用:

https://github.com/spring-cloud/spring-cloud-gateway/blob/master/docs/src/main/asciidoc/spring-cloud-gateway.adoc#combined-global-filter-and-gatewayfilter-ordering

任何想法如何做到这一点?

0 投票
1 回答
684 浏览

spring-boot - spring-cloud-gateway 中的 RetryGatewayFilterFactory 配置

我正在使用spring-cloud-gateway. 我可以看到重试过滤器已经存在于项目的源代码中。

但是没有关于如何通过 yml 配置来配置它的文档。任何人都使用它或与您的项目集成。任何人都可以提供任何线索。

0 投票
1 回答
2213 浏览

spring - 具有多个实例和粘性会话的 Spring Cloud Gateway 路由

我对 Spring Cloud Gateway 非常陌生。我已经使用“路径”配置了两个不同应用程序的路由。现在,我需要一些帮助/文档

我的应用程序没有使用 spring boot/eureka。如果我使用任何发现客户端,我确实可以使用 lb://service-name (不幸的是,这不是我的情况)。

提前致谢。

0 投票
1 回答
2991 浏览

spring-cloud - spring cloud gateway, Is Request size limit filter 可用

我正在与spring-cloud-gateway. 我看到请求大小限制过滤器尚不可用。但我需要开发它。任何想法,它来了吗?还是我应该开始自己的开发。

我知道很难得到任何答案,因为除了开发人员之外,还有一些人正在研究它。

0 投票
4 回答
4002 浏览

spring-boot - 在数据库中持久化 Spring Cloud Gateway 路由

我目前正在使用spring cloud gateway项目搭建简单的api网关,打算将路由持久化到mongodb中,然后刷新,这样新的路由就可以使用了。我做了这样简单的事情来从 mongo 获取我的路线。

我能够在数据库中创建新路由,但无法即时刷新。

我需要了解如何即时刷新路线。

谢谢

0 投票
1 回答
413 浏览

spring-boot - Spring Cloud Gateway 2.X 中对 netty-tcnative 的支持

是否可以通过 Spring Cloud gateway 2 starter 使用 netty-tcnative 来提高 SSL/TLS 性能?我有搜索文档和谷歌没有运气。

我测试了添加多个地方描述的 uber jar,例如。这里 https://github.com/reactor/reactor-netty/issues/344但我没有看到任何表明它被使用的东西。

netty 文档显示了需要手动设置 SSL 上下文的示例,所以我认为可能还有更多。取决于 Spring Cloud Gateway 中可用的 Auto-Config 级别。

我也做了基本的基准测试(使用非常低技术ab),我也没有看到性能差异。