paulwong

          httpClient連接自制SSL證書的rest服務

          通常如果rest服務支持https,需申請收費的ssl證書,但也可自制這種證書。
          httpClient進行鏈接時要進行相應的設置, 主要是設置SSLContext中的TrustSelfSignedStrategy

          import java.security.KeyManagementException;
          import java.security.KeyStoreException;
          import java.security.NoSuchAlgorithmException;
          import java.util.concurrent.TimeUnit;

          import javax.net.ssl.SSLContext;

          import org.apache.http.client.config.RequestConfig;
          import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
          import org.apache.http.impl.client.CloseableHttpClient;
          import org.apache.http.impl.client.HttpClients;
          import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
          import org.apache.http.ssl.SSLContexts;
          import org.springframework.context.annotation.Bean;
          import org.springframework.context.annotation.Configuration;


          @Configuration
          public class HttpClientConfiguration {
              
              
              @Bean
              public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager(AbstractProperties kycProperties) {
                  PoolingHttpClientConnectionManager result = 
                          new PoolingHttpClientConnectionManager(
                                  kycProperties.getHttpConnectionTimeToLiveMinu(), 
                                  TimeUnit.MINUTES
                              );
                  result.setMaxTotal(200);
                  result.setDefaultMaxPerRoute(20);
                  return result;
              }

              @Bean
              public RequestConfig requestConfig(AbstractProperties kycProperties) {
                  return RequestConfig
                              .custom()
                            .setConnectionRequestTimeout(kycProperties.getHttpConnectionTimeout())
                            .setConnectTimeout(kycProperties.getHttpConnectionTimeout())
                            .setSocketTimeout(kycProperties.getHttpConnectionTimeout())
                            .build();
              }
              
              @Bean
              public SSLContext sslContext() throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {

                  return SSLContexts
                              .custom()
                              .loadTrustMaterial(nullnew TrustSelfSignedStrategy())
                              .build()
                              ;
              }

              @Bean
              public CloseableHttpClient httpClient(AbstractProperties kycProperties) throws KeyManagementException, NoSuchAlgorithmException, KeyStoreException {
                  return HttpClients
                            .custom()
          //                  .setConnectionManager(poolingHttpClientConnectionManager(null))
                            .setDefaultRequestConfig(requestConfig(null))
                            .setKeepAliveStrategy(
                                    new MyConnectionKeepAliveStrategy(
                                            kycProperties.getHttpConnectionTimeToLiveMinu(), 
                                            TimeUnit.MINUTES
                                        )
                             )
                            .setMaxConnTotal(200)
                            .setMaxConnPerRoute(20)
          //                  .setConnectionTimeToLive(
          //                          kycProperties.getHttpConnectionTimeToLiveMinu(), 
          //                          TimeUnit.MINUTES
          //                   )
                            .setSSLContext(sslContext())
                            .build();
              }

          }

          相應設置
          http-connection-timeout: 30000
          http-connection-time-to-live-minu: 5

          posted on 2021-09-01 14:24 paulwong 閱讀(383) 評論(0)  編輯  收藏 所屬分類: HTTPCLIENT

          主站蜘蛛池模板: 小金县| 东光县| 乐业县| 晴隆县| 馆陶县| 镇赉县| 新疆| 雷山县| 博湖县| 云南省| 托克逊县| 罗田县| 乃东县| 清苑县| 滨海县| 广元市| 镇康县| 神木县| 克什克腾旗| 东丽区| 泗水县| 肇庆市| 夏津县| 金寨县| 秭归县| 新干县| 辽宁省| 忻州市| 浪卡子县| 玛多县| 宽城| 临沂市| 轮台县| 新余市| 凤庆县| 长白| 林甸县| 新兴县| 杭锦旗| 大邑县| 花莲县|