import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.client.RestTemplate; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.security.*; import java.security.cert.CertificateException; @Configuration public class CustomRestTemplateConfig { @Value("${params.pfxKey}") private String pfxKey; @Bean public RestTemplate customRestTemplate(RestTemplateBuilder restTemplateBuilder) { // 加载PFX文件到密钥存储 KeyStore keyStore; try { keyStore = KeyStore.getInstance("PKCS12"); InputStream inputStream = getClass().getClassLoader().getResourceAsStream("certificate/testISSUE.pfx"); keyStore.load(inputStream, pfxKey.toCharArray()); } catch (KeyStoreException | IOException | NoSuchAlgorithmException | CertificateException e) { throw new RuntimeException("Failed to load PFX file into KeyStore.", e); } // 创建SSL上下文并初始化 SSLContext sslContext; try { KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); keyManagerFactory.init(keyStore, pfxKey.toCharArray()); sslContext = SSLContext.getInstance("TLS"); sslContext.init(keyManagerFactory.getKeyManagers(), null, null); } catch (NoSuchAlgorithmException | KeyStoreException | UnrecoverableKeyException | KeyManagementException e) { throw new RuntimeException("Failed to initialize SSLContext.", e); } // 创建自定义的RestTemplate实例 CloseableHttpClient httpClient = HttpClients.custom() .setSSLContext(sslContext) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); RestTemplate restTemplate = restTemplateBuilder.requestFactory(() -> requestFactory).build(); // 设置字符编码为UTF-8 StringHttpMessageConverter stringConverter = new StringHttpMessageConverter(StandardCharsets.UTF_8); stringConverter.setWriteAcceptCharset(false); restTemplate.getMessageConverters().removeIf(converter -> converter instanceof StringHttpMessageConverter); restTemplate.getMessageConverters().add(0, stringConverter); return restTemplate; } }
- RestTemplate spring https bootresttemplate spring https boot 示例resttemplate spring boot resttemplate spring boot http resttemplate https resttemplate springcloud spring ribbon multivaluemap resttemplate spring resttemplate spring resttemplate模板spring rest resttemplate spring feign resttemplate restclient特性spring