resttemplate 调用https使用下面代码:
-
-
-
public RestTemplate restTemplate(ClientHttpRequestFactory httpRequestFactory) {
-
return new RestTemplate(httpRequestFactory);
-
}
-
-
-
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
-
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
-
//单位为ms
-
factory.setReadTimeout( 10 * 1000);
-
//单位为ms
-
factory.setConnectTimeout( 30 * 1000);
-
return factory;
-
}
调用没有证书的https出现的错误
org.springframework.web.client.ResourceAccessException: I/O error on POST request for "https://gateway.fat.demo.com/service-commodity/providerInventory/queryInventory": sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target; nested exception is javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
修改为下面的java代码后,一切OK:
-
-
-
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);
-
}
-
-
}
-