我正在尝试查找使用 WebClient 的示例。
我的目标是使用 Spring 5 WebClient 使用 https 和自签名证书查询 REST 服务
有什么例子吗?
最佳答案
似乎删除了 Spring 5.1.1 (Spring boot 2.1.0) HttpClientOptions
来自 ReactorClientHttpConnector
,所以在创建 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 时,我们正在配置 insecure 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()
更多信息:
- https://docs.spring.io/spring/docs/5.1.1.RELEASE/spring-framework-reference/web-reactive.html#webflux-client-builder-reactor
- https://netty.io/4.0/api/io/netty/handler/ssl/util/InsecureTrustManagerFactory.html
更新:相同代码的 Java 版本
SslContext context = SslContextBuilder.forClient()
.trustManager(InsecureTrustManagerFactory.INSTANCE)
.build();
HttpClient httpClient = HttpClient.create().secure(t -> t.sslContext(context));
WebClient wc = WebClient
.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient)).build();
关于使用 ssl 的 Spring 5 WebClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418523/