如何在resttemplate或restclient中动态设置ssl上下文?

问题描述 投票:0回答:1

我创建了一个带有连接池和 ssl 上下文作为 Bean 的休息模板..但是我有一个已过期的证书..所以需要在证书过期之前再次设置 ssl 上下文..

因为我需要连接池..我不想每次都创建休息模板..有什么关于如何做到这一点的建议吗?

  @Bean
  public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
    SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(getsslContext()); //need to update ssl context dynamically

    PoolingHttpClientConnectionManager connectionManager =
        PoolingHttpClientConnectionManagerBuilder.create()
            .setSSLSocketFactory(socketFactory)
            .build();
    connectionManager.setMaxTotal(30);
    connectionManager.setDefaultMaxPerRoute(10);

    RequestConfig requestConfig =
        RequestConfig.custom()
            .setResponseTimeout(Timeout.ofSeconds(5))
            .setConnectionRequestTimeout(Timeout.ofSeconds(2))
            .build();

    HttpClient httpClient =
        HttpClientBuilder.create()
            .setConnectionManager(connectionManager)
            .setDefaultRequestConfig(requestConfig)
            .build();

    ClientHttpRequestFactory requestFactory =
        new HttpComponentsClientHttpRequestFactory(httpClient);
    return restTemplateBuilder.requestFactory(() -> requestFactory).build();
  }

java spring spring-boot resttemplate
1个回答
0
投票

您可以尝试直接将 sslSocketFactory 设置为 HttpClient

HttpClients.custom()
            .setSSLSocketFactory(socketFactory)
            //...  
            .build();
© www.soinside.com 2019 - 2024. All rights reserved.