如何配置reactor-netty以使用SSL?

时间:2016-08-15 15:31:57

标签: spring ssl netty reactive-programming project-reactor

我正在尝试熟悉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

1 个答案:

答案 0 :(得分:1)

更新2017-01-04:

使用this patch在Spring Framework的5.0.0.M4版本中对此进行了更正。

原始答案:

我发现解决方案是创建一个尊重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。