【发布时间】:2020-03-16 16:53:37
【问题描述】:
我想用 spring-cloud-gateway 创建一个简单的代理和聚合服务器。我正在使用依赖项spring-cloud-gateway-webflux 和 ProxyExchange 来做到这一点。我在 localhost 中启动应用程序并从浏览器启动它,但是它返回 404 not found。
如果我使用spring-cloud-gateway-mvc 而不是spring-cloud-gateway-webflux,令人惊讶的是代理可以正常工作,我可以在本地主机中浏览stackoverflow。但我仍然想知道为什么spring-cloud-gateway-webflux 不起作用。
谁能帮忙指出我遗漏的任何东西?
控制器:
@RestController
public class RouteController {
@RequestMapping(value="/**", method={ RequestMethod.GET, RequestMethod.POST })
public Mono<ResponseEntity<byte[]>> proxy(ServerHttpRequest request, ServerHttpResponse response, ProxyExchange<byte[]> proxy) throws Exception {
String path = proxy.path("/");
if (request.getMethodValue().startsWith("GET")) {
return proxy.uri("https://stackoverflow.com/" + path).get();
} else {
return proxy.uri("https://stackoverflow.com/" + path).post();
}
}
}
application.yml:
server:
port: 8080
我尝试将以下内容添加到 application.yml 但它不起作用。
spring:
cloud:
gateway:
httpclient:
ssl:
useInsecureTrustManager: true
【问题讨论】:
-
这些配置属性仅适用于独立网关,不适用于这些模块。这些属性的前缀为
spring.cloud.gateway.proxy。 -
我的猜测是
RestTemplate默认会忽略 ssl 错误,而WebClient不会。您可以创建一个ProxyExchangeArgumentResolverbean 并适当地配置WebClient。见github.com/spring-cloud/spring-cloud-gateway/blob/… -
@spencergibb 你的意思是我应该设置属性 spring.cloud.gateway.proxy.ssl.useInsecureTrustManager=true 吗?我试过了,还是不行。
-
该属性不存在。要执行您想要的操作,您需要复制我链接到的代码。
-
谢谢@spencergibb。我添加了一个
ProxyExchangeArgumentResolverbean,但这仍然不起作用。 bean 代码在这里 (github.com/william726/proxy-exchange-demo/blob/…)。我不确定我是否做错了什么,尤其是。注释。
标签: spring-cloud spring-cloud-gateway