SpringBoot 2.0.4中如何禁用WebClient SSL验证?——与SpringBoot 2.1实现方式的差异解析
在Spring Boot 2.0中禁用WebClient SSL验证的正确姿势
你说得没错,Spring Boot 2.0的ReactorClientHttpConnector确实只提供了接收Consumer<HttpClientOptions.Builder>的构造方法,没法直接用2.1版本那种传入现成HttpClient的写法。不过咱们可以通过配置HttpClientOptions.Builder来实现同样的禁用SSL验证效果。
直接可用的代码示例
import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; import org.springframework.http.client.reactive.ReactorClientHttpConnector; import org.springframework.web.reactive.function.client.WebClient; import reactor.netty.http.client.HttpClientOptions; public WebClient createUnsecuredWebClient() { // 构建信任所有证书的SslContext SslContext sslContext = SslContextBuilder.forClient() .trustManager(InsecureTrustManagerFactory.INSTANCE) .build(); // 通过HttpClientOptions.Builder配置SSL return WebClient.builder() .clientConnector(new ReactorClientHttpConnector(options -> { // 启用SSL支持并注入自定义的SslContext options.sslSupport(sslOptions -> sslOptions.sslContext(sslContext)); })) .build(); }
和2.1版本的写法差异对比
- Spring Boot 2.1+:可以直接创建
HttpClient实例,调用secure(t -> t.sslContext(context))配置后传入ReactorClientHttpConnector - Spring Boot 2.0:必须通过
HttpClientOptions.Builder的sslSupport()方法来设置我们的SslContext,这是2.0版本里配置SSL的唯一入口
这样配置出来的WebClient就会跳过SSL证书验证,和2.1版本的实现效果完全一致。
内容的提问来源于stack exchange,提问作者Ulfnir
相关产品推荐
相关产品推荐

