How to Create a Spring RestTemplate using HttpClient5

Overview

The RestTemplate serves as the primary Spring class for HTTP access on the client side. It operates on a comparable conceptual level to other templates such as JdbcTemplate, JmsTemplate, and those featured in other Spring Framework and portfolio projects.

Code

  @Bean
  public RestTemplate restTemplate() throws Exception {

    char[] password = "ca_pass_123".toCharArray();

    SSLContext sslContext = SSLContextBuilder.create()
        .loadKeyMaterial(keyStore("classpath:truststore.p12", password), password)
        .loadTrustMaterial(null, new TrustSelfSignedStrategy()).build();

    final SSLConnectionSocketFactory sslSocketFactory = SSLConnectionSocketFactoryBuilder.create()
        .setSslContext(sslContext)
        .build();

    final HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
        .setSSLSocketFactory(sslSocketFactory)
        .setDefaultTlsConfig(TlsConfig.custom()
            .setHandshakeTimeout(Timeout.ofSeconds(30))
            .setSupportedProtocols(TLS.V_1_3)
            .build())
        .build();

    CloseableHttpClient httpClient = HttpClients.custom()
        .setConnectionManager(cm)
        .build();

    HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);

    return new RestTemplate(factory);
  }

  private KeyStore keyStore(String file, char[] password) throws Exception {

    KeyStore keyStore = KeyStore.getInstance(KEY_TYPE);
    File key = ResourceUtils.getFile(file);
    try (InputStream in = new FileInputStream(key)) {
      keyStore.load(in, password);
    }

    return keyStore;
  }

0 Comments

Post a Comment

Post a Comment (0)

Previous Post Next Post
NERV Open Source

Building production Spring Boot systems?

Explore NERV — open-source Java libraries for audit trails, persistence, exception handling, and reliable event-driven architecture.

Explore NERV on GitHub →