小编典典

Spring 5 WebClient使用SSL

spring

我正在尝试查找WebClient使用的示例。我的目标是使用Spring 5 WebClient使用https和自签名证书查询REST服务

有什么例子吗?


阅读 1400

收藏
2020-04-20

共2个答案

小编典典

切勿在生产中使用此TrustManagerFactory。它仅用于测试目的,因此非常不安全。

@Bean
public WebClient createWebClient() throws SSLException {
    SslContext sslContext = SslContextBuilder
            .forClient()
            .trustManager(InsecureTrustManagerFactory.INSTANCE)
            .build();
    ClientHttpConnector httpConnector = HttpClient.create().secure { t -> t.sslContext(sslContext) }
    return WebClient.builder().clientConnector(httpConnector).build();
}
2020-04-20
小编典典

像Spring 5.1.1长相(spring启动2.1.0)移除HttpClientOptionsReactorClientHttpConnector,所以你不能配置选项在创建实例ReactorClientHttpConnector

现在有效的一种选择是:

val sslContext = SslContextBuilder
            .forClient()
            .trustManager(InsecureTrustManagerFactory.INSTANCE)
            .build()
val httpClient = HttpClient.create().secure { t -> t.sslContext(sslContext) }
val webClient = WebClient.builder().clientConnector(ReactorClientHttpConnector(httpClient)).build()

基本上,在创建HttpClient时,我们将配置不安全的 sslContext,然后将该httpClient传递给ReactorClientHttpConnector全局使用。

另一个选项是TcpClient使用不安全的sslContext 进行配置并使用它来创建HttpClient实例,如下所示:

val sslContext = SslContextBuilder
            .forClient()
            .trustManager(InsecureTrustManagerFactory.INSTANCE)
            .build()
val tcpClient = TcpClient.create().secure { sslProviderBuilder -> sslProviderBuilder.sslContext(sslContext) }
val httpClient = HttpClient.from(tcpClient)
val webClient =  WebClient.builder().clientConnector(ReactorClientHttpConnector(httpClient)).build()
2020-04-20