问题标签 [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.
spring-cloud - 如何在 Spring Cloud Gateway 中为 IOExceptions 配置重试?
我看到重试过滤器支持基于 http 状态代码的重试。我想在连接重置等io异常的情况下配置重试。Spring Cloud Gateway 2 有可能吗?
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 吗?
spring-boot - spring-cloud-gateway RewritePath GatewayFilter 不起作用
我正在开发一个 spring-cloud-gateway 应用程序。我在哪里使用 RewritePath GatewayFilter 来处理一些pathvariable
. 以下是我在端口 80上运行的下游 api 。
在我的网关应用程序中,过滤器配置如下:
但它不起作用。我做错了什么?我收到以下日志。
主要是路径变量没有被重写。有什么帮助吗?
architecture - Api 网关职责:良好实践(授权、请求转换)
我正在考虑在我的微服务之上使用 api 网关。但是有一些架构问题我没有明确的答案,所以我想从社区获得意见。如果你能分享你对好的和坏的做法的想法,那也很棒。因此,为了使这个问题帖子易于阅读,我有两个主要部分“问题”和“详细信息”
问题
Api网关应该负责授权和请求转换吗?
问题主要是,什么是网关:它只是 api 用户和微服务之间的桥梁。还是微服务的版主?请参阅“网关实施策略”部分了解更多信息。
在使用 Amazon API Gateway 的情况下,使用额外的 lambda 函数层对请求进行转换和授权是一种好习惯吗?
如果我选择使用 Amazon API Gateway,那么对上一个问题的回答将是“网关应该充当微服务的主持人”。比我需要通过 Amazon lambdas 处理请求/响应转换和授权,这意味着我将在网关下方有另一层。所以问题是:拥有这种架构是一种好习惯吗?
细节
技术
- 春季启动 2.0
- 智威汤逊
- Spring Cloud Gateway或Amazon 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属性,保持用户的唯一标识)
- 在令牌生命周期内未更改用户密码
spring-boot - 春天云网关|| 需要配置全局和应用程序级别和api级别超时
我正在一个spring-cloud-gateway
项目中工作。我需要配置全局超时/应用程序级超时和特定于 api 的超时。以下是我的下游 API:
此 API 作为下游服务运行。现在以下是我在我的所有这些 API 的路由配置gateway-application
:
现在应用程序级别超时和 api 级别超时工作正常,但我没有任何方法来定义全局超时过滤器。相同的文档尚不可用:
任何想法如何做到这一点?
spring-boot - spring-cloud-gateway 中的 RetryGatewayFilterFactory 配置
我正在使用spring-cloud-gateway
. 我可以看到重试过滤器已经存在于项目的源代码中。
但是没有关于如何通过 yml 配置来配置它的文档。任何人都使用它或与您的项目集成。任何人都可以提供任何线索。
spring - 具有多个实例和粘性会话的 Spring Cloud Gateway 路由
我对 Spring Cloud Gateway 非常陌生。我已经使用“路径”配置了两个不同应用程序的路由。现在,我需要一些帮助/文档
我的应用程序没有使用 spring boot/eureka。如果我使用任何发现客户端,我确实可以使用 lb://service-name (不幸的是,这不是我的情况)。
提前致谢。
spring-cloud - spring cloud gateway, Is Request size limit filter 可用
我正在与spring-cloud-gateway
. 我看到请求大小限制过滤器尚不可用。但我需要开发它。任何想法,它来了吗?还是我应该开始自己的开发。
我知道很难得到任何答案,因为除了开发人员之外,还有一些人正在研究它。
spring-boot - 在数据库中持久化 Spring Cloud Gateway 路由
我目前正在使用spring cloud gateway项目搭建简单的api网关,打算将路由持久化到mongodb中,然后刷新,这样新的路由就可以使用了。我做了这样简单的事情来从 mongo 获取我的路线。
我能够在数据库中创建新路由,但无法即时刷新。
我需要了解如何即时刷新路线。
谢谢
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
),我也没有看到性能差异。