问题标签 [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 投票
3 回答
7762 浏览

java - 使用带有 oauth2 的 spring 云网关

我在使用 Spring Cloud Gateway 时遇到问题

是否有任何依赖项直接或递归调用 spring-boot-starter-tomcat

它不起作用,因为它将启动嵌入式 tomcat 服务器而不是 spring 云网关使用的 netty 服务器

我开始通过排除这个依赖来解决这个问题

spring 云网关成功运行

但有时我想使用 spring-cloud-starter-oauth2 来使用 @EnableOAuth2Sso

我开始使用

那时我面临着抛出异常的大问题

原因:java.lang.IllegalStateException:无法自省类 org.springframework.security.oauth2.config.annotation.web.configuration.OAuth2ClientConfiguration 上的注释方法......

引起:java.lang.NoClassDefFoundError: javax/servlet/Filter

0 投票
2 回答
11499 浏览

spring-cloud - Spring Cloud Gateway 注入头

在 GatewayFilter 中,我试图将标头注入到请求中,如下所示。

@Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { //DO SOME AUTHORIZATION OPERATIONS String jwt = "xxxxx" exchange.getRequest().getHeaders().add("headerkey", jwt); return chain.filter(exchange); }

但我收到以下错误:

0 投票
1 回答
1080 浏览

spring-boot - 具有 SSL 的 Spring Cloud Gateway 无法按名称路由到服务

我在 Spring Cloud Gateway 服务上启用了 SSL,然后路由,例如

停止正常工作。如果我将 uri 更改为真实地址,例如http://localhost:8001路由工作正常。我使用网关版本 2.0.0.RC1。谁能解释如何使用 Eureka 数据 + SSL 设置 Spring Cloud Gateway + 路由?

0 投票
2 回答
15050 浏览

spring-webflux - 如何使用 spring webflux 读取请求正文

我正在使用 Spring 5、Netty 和 Spring webflux 来开发 API 网关。有时我希望网关停止请求,但我也想读取请求的主体以记录它,例如并向客户端返回错误。

我尝试通过订阅正文在 WebFilter 中执行此操作。

当我这样做时,它在正文内容很小的情况下起作用。但是当我有一个大婴儿时,只读取通量的第一个元素,所以我不能拥有整个身体。知道怎么做吗?

0 投票
1 回答
3509 浏览

spring-cloud - Spring Cloud Gateway - 基于Header的重定向

仅使用 Spring Cloud Gateway,我目前正在使用以下路由(在 Kotlin 中定义)代理远程站点:

效果很好。如果我们将 设置proxiedRemotehttps://www.google.com,这会很好,直到我们尝试加载外部资源(如图像)。

问题是这样的:

http://localhost:8081/logos/doodles/2018/**

真的应该出去:

http://localhost:8081/proxgoo/logos/doodles/2018/**

我在想,如果我可以重定向所有内容,Referer标头http://localhost:8081/proxgoo/回到代理路由,那么这就是我所需要的:


所以,实际的问题。我认为以下配置将使用请求标头Referer =重定向所有内容http://localhost:8081/proxgoo/,但它没有选择它。我做了什么傻事吗?

0 投票
2 回答
7320 浏览

spring - 如何在提交之前修改 Spring Cloud Gateway 中的响应正文

我将 Spring Cloud Gateway 与 Spring 5、Spring Reactor 和 Netty 一起用于一个项目。对于发送到网关的每个请求,我想在响应发送到客户端之前做一些事情。我发现最好的方法是使用 beforeCommit 方法向响应中添加一个操作。

我首先尝试了这种方法:

并尝试在异常处理程序中处理异常:

当我这样做时,当我尝试修改内容长度时会出现异常。如果我了解情况。我不能再在我的处理程序中修改响应,因为它已经提交了。所以我尝试了另一种解决方案,并尝试在提交之前修改我执行的操作中的响应:

这次我没有任何异常,我可以修改内容长度但我不能修改响应的正文。

那么有人知道是否可以这样做以及如何?

0 投票
0 回答
6810 浏览

spring-cloud - 使用 Spring Cloud Gateway 的简单网关 - ProxyExchange

我想使用 spring cloud 编写一个简单的网关,以便对第三方的请求看起来来自我的服务(就像我过去使用 Zuul 所做的那样)。

github页面上的示例以及官方文档中的示例似乎正是我想要的。即一个简单的控制器路由,将所有请求代理到给定路由:

但我遇到的问题是,人工制品spring-cloud-starter-gateway不包括org.springframework.cloud.gateway.mvc.ProxyExchange.

要获得ProxyExchange,我需要包含与 .spring-cloud-gateway-mvc不兼容的人工制品spring-cloud-starter-gateway。将这两件事放在一起会导致以下错误:


因此,我不得不使用以下两个依赖项来使基本网关正常工作:

  • spring-cloud-gateway
  • spring-cloud-gateway-mvc

哪个,工作正常,直到我需要org.springframework.cloud.gateway.filter.*在项目的其他地方使用这些包,这意味着我需要包括:

  • spring-cloud-gateway-core, 或者
  • spring-cloud-starter-gateway

这意味着我又回到了不兼容横幅


spring-cloud-starter-gateway正如文档所暗示的那样,是否可以仅使用依赖项来使用简单的 API 网关功能?我正在使用的版本2.0.0.RC1

0 投票
1 回答
36 浏览

java - 具有不同依赖关系的两种实现的最大可重用性

我的任务包括将 API 网关从 Zuul 迁移到 Spring Cloud Gateway。目前有两个主要版本:1.0.1.RELEASE 和 2.0.0.RC1。第一个版本非常基础,我必须手动实现与速率限制、身份验证等相关的过滤器......

而第二个版本具有我们需要的所有功能,并具有完整的 YML 支持。我们公司有严格的规定,永远不要使用 beta 或 RC,而且我们需要在几周内投入生产网关的第一个版本,所以没有足够的时间等待版本 2 的最终发布。

我的团队负责人特别要求我制作 2 个版本,分别使用 SCG 的 1.0.1 和 2.0.0 版本。您如何实现模块以实现最大的可重用性?我的意思是我希望在两个版本之间切换尽可能简单,并且我想尽可能多地重用逻辑。我想到的第一件事就是创建两个独立的项目。你怎么看?

0 投票
4 回答
4913 浏览

spring - Spring Cloud Gateway API - 路由上的上下文路径不起作用

我在 application.yml 中设置了上下文路径

我已经配置了一些路线

我希望使用 localhost:4177/gb-integration/sbl/** 访问 API 网关但是它仅适用于 localhost:4177/sbl/**

似乎我的上下文路径被忽略了。有什么想法可以让我的上下文路径在我的所有路线上工作吗?

0 投票
1 回答
5523 浏览

spring - 在 Spring Cloud Gateway 过滤器中引发自定义运行时异常

我们将 Spring Cloud Gateway 与 Spring Boot 2 和响应式 webflux 模块一起使用。有一个为其中一条路由添加的身份验证过滤器。现在,如果我们抛出一个带有特定状态码的 RuntimeException,它实际上并没有启动。之前这个 auth 检查是 Spring 中 HandlerInterceptor 的一部分,现在我们不能将 web 模块与 webflux 一起使用(来自 Spring 云网关的冲突)。前任:

目前实际响应总是给出 500 内部服务器错误。这是从哪里来的?我们可以在这里从过滤器中获取错误吗?