【问题标题】:How do I configure reactor-netty to use SSL?如何配置 reactor-netty 以使用 SSL?
【发布时间】:2016-12-21 20:10:49
【问题描述】:
我正在尝试熟悉 Spring 的 Project Reactor (https://projectreactor.io/),并构建了一个小型应用程序来通过 SSL 对另一个服务进行 REST 调用。我找不到任何方法来配置 org.springframework.web.client.reactive.WebClient 以通过 SSL 发出请求。似乎没有关于此的文档。我正在使用reactor-core 3.0.0.RC1 和reactor-netty 0.5.0.M3,以及Spring Framework 5.0.0.M1。有谁知道如何使用 SSL 支持配置 reactor-netty?
【问题讨论】:
标签:
spring
ssl
netty
reactive-programming
project-reactor
【解决方案1】:
2017-01-04 更新:
这已在 Spring Framework 的 5.0.0.M4 版本中得到更正,this patch。
原答案:
我发现解决方案是创建一个尊重 SSL 的新 ClientHttpConnector 实现。
public class ReactorClientHttpsAwareConnector implements ClientHttpConnector {
@Override
public Mono<ClientHttpResponse> connect(HttpMethod method, URI uri,
Function<? super ClientHttpRequest, Mono<Void>> requestCallback) {
return reactor.ipc.netty.http.HttpClient.create()
.request(io.netty.handler.codec.http.HttpMethod.valueOf(method.name()),
uri.toString(),
httpClientRequest -> requestCallback
.apply(new ReactorClientHttpRequest(method, uri, httpClientRequest)))
.cast(HttpInbound.class)
.otherwise(HttpException.class, exc -> Mono.just(exc.getChannel()))
.map(ReactorClientHttpResponse::new);
}
}
HttpClient.create() 是客户端 SSL 感知所必需的。