Skip to content
This repository has been archived by the owner on Aug 20, 2021. It is now read-only.

Commit

Permalink
新增 SSLPacker 用来独立封装 ssl 相关内容 fix #71
Browse files Browse the repository at this point in the history
HttpRequestExecuter.execute(HttpRequest, ConnectionConfig) 没有使用
useConnectionConfig fix #70
  • Loading branch information
venusdrogon committed Sep 5, 2019
1 parent 9487e14 commit ebbe3a1
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 42 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,13 @@
*/
package com.feilong.net.httpclient4.builder;

import javax.net.ssl.SSLContext;
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;

import org.apache.http.client.HttpClient;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.impl.client.HttpClients;

import com.feilong.net.entity.ConnectionConfig;
import com.feilong.net.ssl.SSLProtocol;

/**
* HttpClient 构造器.
Expand Down Expand Up @@ -71,49 +69,15 @@ public static HttpClient build(ConnectionConfig connectionConfig){
* {@link org.apache.http.impl.client.HttpClientBuilder#setSSLSocketFactory(LayeredConnectionSocketFactory)}<br>
*/
public static HttpClient build(ConnectionConfig connectionConfig,LayeredConnectionSocketFactory layeredConnectionSocketFactory){
org.apache.http.impl.client.HttpClientBuilder customHttpClientBuilder = HttpClients.custom();

setSSL(connectionConfig, layeredConnectionSocketFactory, customHttpClientBuilder);
//customHttpClientBuilder.setConnectionManager(connManager);
//.setDefaultCredentialsProvider(CredentialsProviderBuilder.build(AuthScope.ANY, userName, password))//
ConnectionConfig useConnectionConfig = defaultIfNull(connectionConfig, ConnectionConfig.INSTANCE);

//---------------------------------------------------------------
return customHttpClientBuilder.build();
}

//---------------------------------------------------------------
org.apache.http.impl.client.HttpClientBuilder customHttpClientBuilder = HttpClients.custom();

/**
* 设置 SSL.
*
* @param connectionConfig
* the connection config
* @param layeredConnectionSocketFactory
* the layered connection socket factory
* @param customHttpClientBuilder
* the custom http client builder
* @see org.apache.http.conn.ssl.NoopHostnameVerifier
* @see javax.net.ssl.HostnameVerifier
* @since 1.11.4
*/
private static void setSSL(
ConnectionConfig connectionConfig,
LayeredConnectionSocketFactory layeredConnectionSocketFactory,
org.apache.http.impl.client.HttpClientBuilder customHttpClientBuilder){
if (null != layeredConnectionSocketFactory){
customHttpClientBuilder.setSSLSocketFactory(layeredConnectionSocketFactory);
}
//---------------------------------------------------------------
// SSLContext sslContext = buildHttpClient4SSLContext();
//这代码比上面简洁
SSLContext sslContext = com.feilong.net.ssl.SSLContextBuilder.build(SSLProtocol.TLSv12);
customHttpClientBuilder.setSSLContext(sslContext);
SSLPacker.pack(customHttpClientBuilder, useConnectionConfig, layeredConnectionSocketFactory);

//---------------------------------------------------------------
//since 2.0.0
if (connectionConfig.getTurnOffHostnameVerifier()){
customHttpClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);
}
return customHttpClientBuilder.build();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public static HttpResponse execute(HttpRequest httpRequest,ConnectionConfig conn

//---------------------------------------------------------------
try{
return execute(httpUriRequest, connectionConfig);
return execute(httpUriRequest, useConnectionConfig);
}catch (Exception e){
throw new UncheckedHttpException(HttpRequestExecuterExceptionMessageBuilder.build(httpRequest, useConnectionConfig, e), e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright (C) 2008 feilong
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.feilong.net.httpclient4.builder;

import javax.net.ssl.SSLContext;

import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.ssl.NoopHostnameVerifier;

import com.feilong.net.entity.ConnectionConfig;
import com.feilong.net.ssl.SSLProtocol;

/**
* ssl 封装器.
*
* @author <a href="http://feitianbenyue.iteye.com/">feilong</a>
* @since 2.0.0
*/
public final class SSLPacker{

/** Don't let anyone instantiate this class. */
private SSLPacker(){
//AssertionError不是必须的. 但它可以避免不小心在类的内部调用构造器. 保证该类在任何情况下都不会被实例化.
//see 《Effective Java》 2nd
throw new AssertionError("No " + getClass().getName() + " instances for you!");
}

//---------------------------------------------------------------

/**
* 设置 SSL.
*
* @param customHttpClientBuilder
* the custom http client builder
* @param connectionConfig
* the connection config
* @param layeredConnectionSocketFactory
* the layered connection socket factory
*
* @see org.apache.http.conn.ssl.NoopHostnameVerifier
* @see javax.net.ssl.HostnameVerifier
*/
static void pack(
org.apache.http.impl.client.HttpClientBuilder customHttpClientBuilder,
ConnectionConfig connectionConfig,
LayeredConnectionSocketFactory layeredConnectionSocketFactory){
if (null != layeredConnectionSocketFactory){
customHttpClientBuilder.setSSLSocketFactory(layeredConnectionSocketFactory);
}
//---------------------------------------------------------------
// SSLContext sslContext = buildHttpClient4SSLContext();
//这代码比上面简洁
SSLContext sslContext = com.feilong.net.ssl.SSLContextBuilder.build(SSLProtocol.TLSv12);
customHttpClientBuilder.setSSLContext(sslContext);

//---------------------------------------------------------------
//since 2.0.0
if (connectionConfig.getTurnOffHostnameVerifier()){
customHttpClientBuilder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);
}
}
}

0 comments on commit ebbe3a1

Please sign in to comment.