RestTemplateConfig支持https的ip写法

package com.yuanian.common.extend;

import java.io.IOException;
import java.lang.reflect.Type;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.List;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.SSLContext;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.ssl.SSLContextBuilder;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.converter.BufferedImageHttpMessageConverter;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.FormHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotWritableException;
import org.springframework.http.converter.ResourceHttpMessageConverter;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import com.xneure.utils.JsonUtil;
import com.yuanian.common.JsonConverter;

public class HttpRestTemplate extends RestTemplate{
    public HttpRestTemplate(){
        this(getHttpRequestFactory());
    }

    private static HttpComponentsClientHttpRequestFactory getHttpRequestFactory(){
        HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(createHttpClient());
//        httpComponentsClientHttpRequestFactory.setConnectTimeout(1000);
//        httpComponentsClientHttpRequestFactory.setConnectionRequestTimeout(1000);
        return httpComponentsClientHttpRequestFactory;
    }

    public HttpRestTemplate(ClientHttpRequestFactory requestFactory,List<HttpMessageConverter<?>> messageConverters){
        setRequestFactory(requestFactory);
        setMessageConverters(messageConverters);
    }

    public HttpRestTemplate(ClientHttpRequestFactory requestFactory){
        setRequestFactory(requestFactory);
        List<HttpMessageConverter<?>> mc = getMessageConverters();
        JsonConverter jsonConverter = new JsonConverter(){
            @Override
            protected void writeInternal(Object object,Type type,HttpOutputMessage outputMessage) throws IOException,HttpMessageNotWritableException{
                outputMessage.getBody().write(JsonUtil.toJson(object).getBytes("utf-8"));
            }
        };
        mc.add(jsonConverter);
        mc.add(new FormHttpMessageConverter());
        mc.add(new BufferedImageHttpMessageConverter());
        mc.add(new ByteArrayHttpMessageConverter());
        mc.add(new StringHttpMessageConverter());
        mc.add(new ResourceHttpMessageConverter());
    }

    public static CloseableHttpClient createHttpClient(){
        HttpClientBuilder b = HttpClientBuilder.create();
        SSLContext sslContext = null;
        try{
            sslContext = new SSLContextBuilder().loadTrustMaterial(null,new TrustStrategy(){
                public boolean isTrusted(X509Certificate[] arg0,String arg1) throws CertificateException{
                    return true;
                }
            }).build();
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
        b.setSSLContext(sslContext);
        HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
        SSLConnectionSocketFactory sslSocketFactory = new SSLConnectionSocketFactory(sslContext,hostnameVerifier);
        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create()
                .register("http",PlainConnectionSocketFactory.getSocketFactory()).register("https",sslSocketFactory).build();
        PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
        connMgr.setMaxTotal(1000);
        connMgr.setDefaultMaxPerRoute(500);
        b.setConnectionManager(connMgr);
        CloseableHttpClient client = b.build();
        return client;
    }
}

主要关注createHttpClient方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值