版本:org.springframework:spring-web:5.1.8.RELEASE、org.apache.httpcomponents:httpclient:4.5.9
import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.ssl.SSLContexts; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.web.client.RestTemplate; import javax.net.ssl.SSLContext; import java.io.IOException; import java.io.InputStream; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; import java.security.cert.CertificateException; @Bean public RestTemplate restTemplate(@Value("${weixin.key.file}") String keyFile, @Value("${weixin.key.password}") String keyPassword) { InputStream keyStream = getClass().getResourceAsStream(keyFile); KeyStore keyStore; try { keyStore = KeyStore.getInstance("PKCS12"); keyStore.load(keyStream, keyPassword.toCharArray()); } catch (KeyStoreException | CertificateException | NoSuchAlgorithmException | IOException e) { throw new RuntimeException(e.getMessage(), e); } SSLContext sslContext; try { sslContext = SSLContexts.custom().loadKeyMaterial(keyStore, keyPassword.toCharArray()).build(); } catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException | UnrecoverableKeyException e) { throw new RuntimeException(e.getMessage(), e); } CloseableHttpClient httpClient = HttpClients.custom().setSSLContext(sslContext).build(); HttpComponentsClientHttpRequestFactory httpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); return new RestTemplate(httpRequestFactory); }(完)
