SpringBoot 3.0中HttpComponentsClientHttpRequestFactory的替代类是什么?
SpringBoot 3.0.x 替代HttpComponentsClientHttpRequestFactory的方案
在SpringBoot 3.0.x(对应Spring Framework 6)中,原org.springframework.http.client.HttpComponentsClientHttpRequestFactory类仍然可用,但需要满足两个前提:
- 手动引入Apache HttpClient 5.x的SpringBoot starter依赖,因为SpringBoot3默认不再自动包含该依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-httpclient</artifactId> </dependency>
- 适配Apache HttpClient 5.x的API变更,原4.x版本的部分类和方法已调整。
调整后的禁用SSL证书验证代码如下:
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; import org.apache.hc.client5.http.impl.classic.HttpClients; import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager; import org.apache.hc.client5.http.socket.ConnectionSocketFactory; import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory; import org.apache.hc.client5.http.ssl.NoopHostnameVerifier; import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; import org.apache.hc.core5.http.config.Registry; import org.apache.hc.core5.http.config.RegistryBuilder; import org.apache.hc.core5.ssl.SSLContexts; import org.apache.hc.core5.ssl.TrustStrategy; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import javax.net.ssl.KeyManagementException; import javax.net.ssl.KeyStoreException; import javax.net.ssl.NoSuchAlgorithmException; public HttpComponentsClientHttpRequestFactory getRequestFactory() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException { // 信任所有证书的策略 TrustStrategy acceptingTrustStrategy = (cert, authType) -> true; javax.net.ssl.SSLContext sslContext = SSLContexts.custom() .loadTrustMaterial(null, acceptingTrustStrategy) .build(); // 创建SSL连接套接字工厂,忽略主机名验证 SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory( sslContext, NoopHostnameVerifier.INSTANCE ); // 注册HTTP和HTTPS的套接字工厂 Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create() .register("https", sslsf) .register("http", PlainConnectionSocketFactory.getSocketFactory()) .build(); // 创建连接管理器 BasicHttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager(socketFactoryRegistry); // 构建HttpClient实例 CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(sslsf) .setConnectionManager(connectionManager) .build(); // 返回请求工厂 return new HttpComponentsClientHttpRequestFactory(httpClient); }
核心API变更点:
- Apache HttpClient的包路径从
org.apache.http升级为org.apache.hc.client5.http、org.apache.hc.core5.http等(对应5.x版本) PlainConnectionSocketFactory需通过getSocketFactory()静态方法获取实例,不再直接实例化- SSL相关工具类的导入路径同步调整
内容的提问来源于stack exchange,提问作者Andrey Rogov
相关产品推荐
相关产品推荐

