使用 SSL 的 Spring 5 WebClient

新手上路,请多包涵

我试图找到 WebClient 使用的例子。

我的目标是使用 Spring 5 WebClient 使用 https 和自签名证书查询 REST 服务

有什么例子吗?

原文由 Seb 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

请参阅使用 不安全的 TrustManagerFactory 的示例,它信任所有 X.509 证书(包括自签名)而无需任何验证。文档中的重要说明:

切勿在生产中使用此 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();
}

原文由 Venelin 发布,翻译遵循 CC BY-SA 4.0 许可协议

看起来像 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 时,我们正在配置 不安全sslContext ,然后将此 httpClient 传递给 ReactorClientHttpConnector 全局使用。

另一个选项 是使用不安全的 sslContext 配置 TcpClient 并使用它来创建 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()

了解更多信息:

更新:相同代码的 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();

原文由 Munish Chandel 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题