IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> restTemplate发送https请求免证书 -> 正文阅读

[网络协议]restTemplate发送https请求免证书

import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;

import javax.net.ssl.*;
import java.nio.charset.StandardCharsets;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;

@Slf4j
@Configuration
public class HttpConfig {
    /**
     * restTemplate
     */
    @Bean
    public RestTemplate restTemplate(HttpClient httpClient) {
        // 使用httpClient实现通信
        ClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
        RestTemplate restTemplate = new RestTemplate(factory);
        // string
        restTemplate.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
        // json
//        restTemplate.getMessageConverters().set(6, mappingJackson2HttpMessageConverter);
        return restTemplate;
    }

    /**
     * httpClient
     */
    @Bean
    public HttpClient httpClient() {
        // 默认的请求参数配置
        RequestConfig config = RequestConfig.custom()
                // 获取连接超时
                .setConnectionRequestTimeout(5000)
                // 连接超时
                .setConnectTimeout(5000)
                // 读超时
                .setSocketTimeout(120000)
                .build();
        HttpClient client = HttpClientBuilder.create()
                .setDefaultRequestConfig(config)
                .setMaxConnTotal(400)
                .setMaxConnPerRoute(100)
                .setConnectionManager(httpClientConnectionManager(trustManagers()))
                .build();
        return client;
    }

    private HttpClientConnectionManager httpClientConnectionManager(TrustManager[] trustManagers) {
        // 忽略证书问题
        SSLContext sc = null;
        try {
            sc = SSLContext.getInstance("SSL");
            sc.init(null, trustManagers, new SecureRandom());
        } catch (NoSuchAlgorithmException | KeyManagementException e) {
            log.error(e.getMessage(), e);
        }
        // 忽略hostname验证
        HostnameVerifier verifier = (String hostname, SSLSession session) -> {
            return true;
        };
        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sc, verifier);

        // 连接管路器配置
        Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.getSocketFactory())
                // 设置个性化的 sslSocketFactory
                .register("https", sslSocketFactory)
                .build();
        // connectionManager 连接管理器
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
        // MaxTotal
        connectionManager.setMaxTotal(3000);
        // MaxPerRoute
        connectionManager.setDefaultMaxPerRoute(1000);
        return connectionManager;
    }

    /**
     * 创建多个信任管理器数组
     *
     * @return 多个信任管理器数组
     */
    public TrustManager[] trustManagers() {
        TrustManager trustManager = new X509TrustManager() {
            /**
             * 检查客户端的可靠性,
             * 不通过则抛出异常CertificateException
             * @param arg0
             * @param arg1
             */
            @Override
            public void checkClientTrusted(X509Certificate[] arg0, String arg1) {
            }

            /**
             * 检查服务端的可靠性,
             * 不通过则抛出异常CertificateException
             * @param arg0
             * @param arg1
             */
            @Override
            public void checkServerTrusted(X509Certificate[] arg0, String arg1) {
            }

            /**
             * 获取可接受的证书
             * @return
             */
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return new X509Certificate[0];
            }
        };
        return new TrustManager[]{trustManager};
    }

}


    @Autowired
    RestTemplate restTemplate;
s = restTemplate.postForObject(replace, httpEntity, String.class);
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 12:07:35  更:2022-02-26 12:09:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年10日历 -2024/10/5 13:22:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码