zoukankan      html  css  js  c++  java
  • 【SpringBoot+RestTemplate】远程调用支持https,可切换httpclient或Okhttp

    1、RestTemplate使用Okhttp调用https接口,SpringBoot配置如下所示:

    
        @Bean
        public RestTemplate restTemplate() {
            X509TrustManager trustManager;
            SSLContext sslContext;
            try {
                trustManager = new X509TrustManager() {
                    @Override
                    public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
                    }
                    @Override
                    public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
    
                    }
                    @Override
                    public X509Certificate[] getAcceptedIssuers() {
                        return new X509Certificate[0];
                    }
                };
                sslContext = SSLContext.getInstance("TLS");
                sslContext.init(null, new TrustManager[]{trustManager}, new SecureRandom());
            } catch (Exception e) {
                e.printStackTrace();
            }
            OkHttpClient client = new OkHttpClient.Builder()
                    .hostnameVerifier((host, session) -> true)
                    .sslSocketFactory(sslContext.getSocketFactory(), trustManager)
                    .connectTimeout(60L, TimeUnit.SECONDS)
                    .readTimeout(10L, TimeUnit.SECONDS)
                    .writeTimeout(60L, TimeUnit.SECONDS)
                    .build();
            OkHttp3ClientHttpRequestFactory factory = new OkHttp3ClientHttpRequestFactory(client);
            RestTemplate restTemplate = new RestTemplate(factory);
            return restTemplate;
        }
    

    2、RestTemplate使用HttpClient调用https接口,SpringBoot配置如下所示:

            RestTemplate restTemplate = new RestTemplate();
            restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
            HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
           try {
                TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
                SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, acceptingTrustStrategy).build();
                SSLConnectionSocketFactory csf = new SSLConnectionSocketFactory(sslContext);
                CloseableHttpClient httpClient = HttpClients.custom().setSSLSocketFactory(csf).build();
                requestFactory.setHttpClient(httpClient);
                requestFactory.setConnectionRequestTimeout(6000);
                requestFactory.setConnectTimeout(6000);
                requestFactory.setReadTimeout(10000);
            } catch (Exception e) {
                e.printStackTrace();
            }
            restTemplate.setRequestFactory(requestFactory);
            return restTemplate;
    
  • 相关阅读:
    插入迭代器
    operator[] 和 insert
    STL注意比较函数
    remove、erase
    reserve的使用
    allocator
    【转】【模板】求割点和桥
    【模拟,时针分针秒针两两夹角】【没有跳坑好兴奋】hdu
    【强连通分量分解】
    【模拟ACM排名】ZOJ-2593 Ranking (Andrew Stankevich’s Contest #5)
  • 原文地址:https://www.cnblogs.com/kevin-ying/p/13913083.html
Copyright © 2011-2022 走看看