• 【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;
    
  • 相关阅读:
    js 字符中 带 函数 再传对象参数
    window server 2012 II8 假陌生 碰到的问题
    IIS 下载文件 报错“401
    easyui使用时出现这个Uncaught TypeError: Cannot read property 'combo' of undefined
    eclipse+gnuarm+使用报错
    mini2440:通过JLink烧写BootLoader到Nor Flash
    在Linux中搭建一个FTP服务器
    SPFA模板
    Bellman_ford模板
    前向星&链式前向星
  • 原文地址:https://www.cnblogs.com/kevin-ying/p/13913083.html
Copyright © 2020-2023  润新知