问题标签 [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 回答
3948 浏览

java - spring 云网关中的身份验证

我是春天云的新手。我正在尝试集成 spring 云网关(spring cloud Finchley.SR1)只是为了验证和路由我的请求。

我的应用程序堆栈如下

  • 使用 spring mvc 和 angular 构建的主仪表板应用程序。它有登录页面和仪表板。身份验证集成在其中,根据数据库对用户凭据进行身份验证。我还在这个应用程序中使用hazelcast进行会话复制。
  • 一旦用户登录到上面的仪表板并在其中导航,就会调用一组下游服务。
  • 使用 Spring Cloud Gateway 构建的API Gateway:目前它只做路由。

需要实现以下

  • 第一个请求将到达网关我需要检查用户是否已通过身份验证,如果未通过身份验证,则我需要显示仪表板应用程序(即第一个应用程序)的登录页面,否则允许用户继续。
  • 一旦用户登录并在仪表板内导航,那么对下游服务的 api 请求也将通过api 网关,我还需要对这些请求进行身份验证,如果用户未通过身份验证,则发送 403 状态。

我无法弄清楚如何在spring cloud gateway app中处理这些身份验证。是否可以利用我在Main Dashboard App中添加的 hazelcast 会话复制,使用它来验证网关中的用户?

或者有没有更好的方法使用我可以在这里使用的 spring 云套件工具。一个示例应用程序将很有用

0 投票
1 回答
1022 浏览

spring-boot - CloudFoundry 中的 Spring Cloud Gateway

我一直在尝试让我的应用程序在将它们部署到 CloudFoundry 实例后运行。我正在使用的实例不允许使用 http 执行请求(它们只会超时),所以我必须将所有请求路由到 https。

我正在使用的组件/版本是:

  • 爪哇 10
  • Spring Boot 2.0.4.RELEASE/Spring Cloud Finchley.SR1
  • 春天云网关
  • 弹簧云配置服务器
  • spring-cloud-starter-netflix-eureka

失败的配置

EurekaClient 配置(在网关和 gw 应该路由到的后端)

网关配置

我已经尝试过的事情:

  • 使用文档lb:https://user-service中描述的方式->据我所见将没有效果
  • 使用应用程序的真实网址 ( uri: https://user-service.cf-instance.io) -> 路由按预期工作。

但我不想在我的配置中定义 url,它们应该由 eureka 返回并由网关正确构建。

提前致谢

编辑:

这是/eureka/apps https://pastebin.com/WP3b6PQG的输出

我目前正在努力将当前代码导入 GitHub,当我找到时间获得清晰的状态时,我将编辑这篇文章。

编辑2:

您可以在我的 GitHub 上找到完整示例(使用 SpringCloudGateway、Eureka...) 这是一个运行示例,应用的配置不会使用 Eureka。要使用 Eureka gateway-service-cloud.yml,必须采用 in config 服务。

- id: user-service uri: lb://user-service

请忽略文档服务,这还不行,我首先需要重写路径。

0 投票
2 回答
2740 浏览

routing - 在 YAML 中将多个路径路由到同一路由

我正在尝试将一组广泛的路由配置转换为 Spring Cloud Gateway Yaml DSL。

我遇到的一个问题是(非常常见的情况)多条路径应该映射到同一条路径。也就是说,任何与 、 或 匹配的传入 URL/abc/**都应/def/**路由/ghi/**到某个 uri http://example.org(并应用相同的过滤器集等)。

在 Fluent 基于 Java 的路由方法中,这可以通过以下.or().方法实现,例如:r.path("/abc/**").or().path("/def/**").or().path("/fhi/**")...

如何通过基于 YAML 的路由配置来实现相同的功能?

编辑:我在文档中看到: https ://cloud.spring.io/spring-cloud-gateway/single/spring-cloud-gateway.html#gateway-request-predicates-factories

“多个路由谓词工厂可以组合并通过逻辑组合and

是否有另一种方法可以通过 Yaml 实现路径谓词的 OR-ing 而无需声明多个路由?可以覆盖某些东西来支持这一点吗?

0 投票
0 回答
335 浏览

spring-boot - Spring-Cloud-gateway 的负载平衡显示了一些服务停止/终止的后备很长时间

1) Spring-Cloud-Gateway(SCG) 从4个同名微服务的负载均衡开始,SCG在Browser的服务中显示所有。

2) 关闭/终止 1 个微服务,

3) SCG 长时间显示该服务的 FallBack Error。

一段时间后,它不会显示该服务的实例。

我希望该服务不应该有任何时间滞后。并且不会显示错误实例。

0 投票
1 回答
188 浏览

dynamic - 如何在 Spring Cloud Gateway 中获取可用的过滤器列表?

我正在做一项工作,通过使用以下代码在运行时将路由动态设置到 Spring Cloud Gateway 中,

无论里面的谓词和过滤器是否可用甚至存在,都可以成功添加路由。如果存在不存在谓词或过滤器的路由,则会发生异常。

问题是如何在运行时获取可用的谓词和过滤器列表,这样我就可以检查传入的 RouteDefinition 是否有效。

到目前为止,我已经发现 RouteDefinitionRouteLocator 类中的可用谓词和过滤器列表,并且我可以自动装配它的一个实例。但这似乎不是解决问题的好方法。

有任何想法吗?非常感谢!!

0 投票
3 回答
4621 浏览

spring-boot - Spring Cloud Gateway 无法从 eureka 服务器解析服务 ID

按照spring 指南构建了 eureka 服务器、spring 云网关和一个示例 rest 服务。

但是,网关无法使用来自 eureka 服务器的服务名称检索 url。网关和服务的注册似乎没问题。当提供实际端点而不是服务 ID 时,它可以正常工作。我无法理解为什么网关没有从尤里卡解析服务 ID。我是否缺少任何配置?

错误信息:

服务注册:在此处输入图像描述

附上代码的链接:

0 投票
1 回答
2027 浏览

spring-boot - 如何在 Spring Boot 上向 Netty 服务器提供自定义 SSLContext

我们如何使用 Netty 服务器为 Spring Boot 应用程序配置自定义 SSLContext?

从源代码中,我看到“reactor.ipc.netty.http.server.HttpServerOptions”是一些服务器启动选项,但我找不到配置它们的方法。

是否有任何处理程序可以通过它注入我们的自定义 SSLContext?

我正在寻找与此类似的东西(使用 ssl 的 Spring 5 WebClient),其中 WebClient 通过“reactor.ipc.netty.http.client.HttpClientOptions”配置了自定义 SSLContext。

0 投票
0 回答
476 浏览

spring-cloud - Spring Cloud Gateway——通过调度刷新路由

我有一个 Spring-Cloud-Gateway 应用程序 (V. Finchley.SR1),需要将路由配置进行外部化和可刷新。我目前能够将网关配置为从 Cloud-Config 应用程序中提取配置,并通过点击云应用程序上的 /actuator/refresh 端点来刷新路由。但是,我想通过计划将路由刷新配置为自动,而不是要求客户端 POST 到 /actuator/refresh。如何做到这一点?

0 投票
0 回答
313 浏览

spring-cloud - GATEWAY_REQUEST_URL_ATTR 和请求 URI 之间的区别

GATEWAY_REQUEST_URL_ATTR和 request URI from 和有什么不一样ServerWebExchange?在某些内置过滤器中,例如ForwardPathFilter仅修改请求的 URI,但在其他过滤器中,例如RewritePathGatewayFilterFactory,它们都被更改。创建自定义过滤器以更改 URL 中的某些内容时,我应该更改其中之一还是同时更改两者?

0 投票
0 回答
214 浏览

spring-cloud - 当 Content-Length 标头为 0 [Spring Cloud Gateway] 时,WebFilter 的 doOnSuccessOrError 消费者不起作用

当标头为 0时, WebFilterdoOnSuccessOrErrordoAfterSuccessOrError消费者不工作。Content-Length

我有一个 WebFilter 如下:

网关使用此配置将所有流量路由到 tomcat 应用程序:

我在 Spring Boot Tomcat 应用程序上有这三个端点:

通过网关请求/foo它按预期工作

为了/empty-response

GlobalFilter并按GatewayFilter预期工作。但是,如您所见,webFilter doOnSuccessOrError并且webFilter doAfterSuccessOrError缺少/empty-response. /redirect端点也是如此。

您可以使用https://github.com/hisener/sc-gateway-test来重现它。