从HttpClient4升级到HttpClient5:setSSLContext方法替代方案求助
HttpClient 5 替换 setSSLContext 的解决方案
HttpClient 5 正式移除了HttpClientBuilder.setSSLContext()方法,需要通过配置SSLConnectionSocketFactory并关联到客户端构建器来实现相同功能,以下是具体修改方案:
核心修改点
- 使用
SSLConnectionSocketFactoryBuilder构建带有目标SSLContext的套接字工厂 - 通过
HttpClientBuilder.setSSLSocketFactory()替代原有的setSSLContext()方法
修改后的完整代码
@Autowired public AdministrativoClient(RestTemplate restTemplate, @Value("${administrativo.service.url}") String pathUrl) { TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true; SSLContext sslContext; try { sslContext = org.apache.http.ssl.SSLContexts.custom() .loadTrustMaterial(null, acceptingTrustStrategy) .build(); // HttpClient5 中使用SSLConnectionSocketFactoryBuilder创建套接字工厂 SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create() .setSslContext(sslContext) .build(); // 替换setSSLContext为setSSLSocketFactory CloseableHttpClient httpClient = HttpClients.custom() .setSSLSocketFactory(sslSocketFactory) .build(); // 注意:如果使用Spring框架,需确保HttpComponentsClientHttpRequestFactory适配HttpClient5 // Spring 5.3+ / Spring Boot 2.4+ 版本已支持HttpClient5 HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(); requestFactory.setHttpClient(httpClient); this.restTemplate = restTemplate; restTemplate.setRequestFactory(requestFactory); } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) { e.printStackTrace(); } this.pathUrl = pathUrl; }
额外注意事项
- 确认导入正确的包:
org.apache.hc.client5.http.socket.SSLConnectionSocketFactory和org.apache.hc.client5.http.socket.SSLConnectionSocketFactoryBuilder - 确保Spring版本与HttpClient5兼容,避免因依赖版本不匹配导致的其他问题
内容的提问来源于stack exchange,提问作者kengi ortega
相关产品推荐
相关产品推荐

