我想用spring-cloud-gateway创建一个简单的代理和聚合服务器。我正在使用依赖项spring-cloud-gateway-webflux
和ProxyExchange来做到这一点。我在本地主机中启动该应用程序,然后从浏览器启动该应用程序,但是它返回未找到的404。
[如果我使用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
在我的情况下,这是http标头的问题。添加以下代码,然后一切对我有用。
proxy.sensitive(HttpHeaders.HOST)
似乎ProxyExchange在默认情况下将传递HTTP请求标头,对于WebClient
,没有默认的HTTP标头。