paulwong

          httpClient連接自制SSL證書的rest服務(wù)

          通常如果rest服務(wù)支持https,需申請收費(fèi)的ssl證書,但也可自制這種證書。
          httpClient進(jìn)行鏈接時要進(jìn)行相應(yīng)的設(shè)置, 主要是設(shè)置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();
              }

          }

          相應(yīng)設(shè)置
          http-connection-timeout: 30000
          http-connection-time-to-live-minu: 5

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

          主站蜘蛛池模板: 崇礼县| 宜兰县| 东光县| 马尔康县| 新化县| 宜章县| 河南省| 永春县| 青龙| 乾安县| 巴青县| 喀喇沁旗| 石首市| 南充市| 翁源县| 泽普县| 道真| 裕民县| 黄大仙区| 桐柏县| 中江县| 利川市| 义马市| 阿城市| 井冈山市| 和平区| 玉溪市| 双牌县| 黎城县| 玛纳斯县| 吐鲁番市| 新蔡县| 姚安县| 临安市| 新化县| 治多县| 民县| 云霄县| 沙雅县| 新乐市| 策勒县|