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;
    
  • 相关阅读:
    三列布局_左右绝对定位_中间适应
    三列布局_左右固定_中间自适应
    两列布局_左右二侧_绝对定位
    二列布局_左右固定_自己撑开父级块
    两列布局_右侧固定_左侧自适应
    两列布局_左侧固定_右侧自适应
    单列布局_宽度自适应_内容居中
    单列布局_上中下等宽
    聊一聊Unity协程背后的实现原理
    发火箭和做游戏有什么共通点?
  • 原文地址:https://www.cnblogs.com/kevin-ying/p/13913083.html
Copyright © 2011-2022 走看看