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;
    
  • 相关阅读:
    C语言实现—学生成绩管理系统
    C++ 制作一个“测运”小游戏-rand()函数的应用
    C语言实现-航空订票系统(飞机订票系统)
    测试随笔功能
    ASP.Net 连接多个数据库之间的切换
    190906mysql常用语法
    190327 Python登录接口
    190221 百元百鸡
    181102 Windows下安装kivy(用python写APP)
    181102 Python环境搭建(安装Sublime Text3)
  • 原文地址:https://www.cnblogs.com/kevin-ying/p/13913083.html
Copyright © 2011-2022 走看看