RestTemplateTips

RestTemplateTips

RestTemplate 发起 HTTPS 请求

如果仅仅是为了证明请求功能正常,而真的挂载 SSL 证书,然后使用这个证书与服务器建立连接的话,未免太麻烦,这里有一个简单的方法,就是直接信任所有证书,即不进行 HTTPS 的协议校验

@Primary
@Bean
public RestTemplate restTemplate() {
    return new RestTemplate(generateHttpsRequestFactory());
}

public HttpComponentsClientHttpRequestFactory generateHttpsRequestFactory() {
    try {
        TrustStrategy acceptingTrustStrategy = (x509Certificates, authType) -> true;
        SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
        SSLConnectionSocketFactory connectionSocketFactory =
                new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());

        HttpClientBuilder httpClientBuilder = HttpClients.custom();
        httpClientBuilder.setSSLSocketFactory(connectionSocketFactory);
        CloseableHttpClient httpClient = httpClientBuilder.build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
        factory.setHttpClient(httpClient);
        factory.setConnectTimeout(10 * 1000);
        factory.setReadTimeout(30 * 1000);
        return factory;
    } catch (Exception e) {
        log.error("创建HttpsRestTemplate失败", e);
        throw new RuntimeException("创建HttpsRestTemplate失败", e);
    }

}