Http client support ssl
diff --git a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
index d402d7a..5e42540 100644
--- a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
+++ b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/AbstractHttpClient.scala
@@ -59,12 +59,21 @@
ConnectTimeoutException,
HttpHostConnectException
}
+import org.apache.http.conn.ssl.{SSLConnectionSocketFactory, TrustSelfSignedStrategy}
import org.apache.http.entity.{ContentType, StringEntity}
import org.apache.http.entity.mime.MultipartEntityBuilder
-import org.apache.http.impl.client.{BasicCookieStore, CloseableHttpClient, HttpClients}
+import org.apache.http.impl.client.{
+ BasicCookieStore,
+ CloseableHttpClient,
+ HttpClientBuilder,
+ HttpClients
+}
import org.apache.http.message.BasicNameValuePair
+import org.apache.http.ssl.SSLContextBuilder
import org.apache.http.util.EntityUtils
+import javax.net.ssl.{HostnameVerifier, SSLContext, SSLSession}
+
import java.net.URI
import java.nio.charset.Charset
import java.util
@@ -81,12 +90,26 @@
protected val cookieStore = new BasicCookieStore
- protected val httpClient: CloseableHttpClient = HttpClients
+ private val httpClientBuilder: HttpClientBuilder = HttpClients
.custom()
.setDefaultCookieStore(cookieStore)
.setMaxConnTotal(clientConfig.getMaxConnection)
.setMaxConnPerRoute(clientConfig.getMaxConnection / 2)
- .build
+
+ protected val httpClient: CloseableHttpClient = if (clientConfig.isSSL) {
+ val sslContext: SSLContext =
+ SSLContextBuilder.create.loadTrustMaterial(null, new TrustSelfSignedStrategy).build
+
+ val sslConnectionFactory = new SSLConnectionSocketFactory(
+ sslContext,
+ new HostnameVerifier() {
+ override def verify(hostname: String, session: SSLSession) = true
+ }
+ )
+ httpClientBuilder.setSSLSocketFactory(sslConnectionFactory).build()
+ } else {
+ httpClientBuilder.build()
+ }
if (clientConfig.getAuthenticationStrategy != null) {
clientConfig.getAuthenticationStrategy match {
diff --git a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfig.scala b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfig.scala
index dbce2d3..dea081b 100644
--- a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfig.scala
+++ b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfig.scala
@@ -44,6 +44,7 @@
private var maxConnection: Int = 20
private var retryEnabled: Boolean = _
private var retryHandler: RetryHandler = _
+ private var ssl: Boolean = false
protected[config] def this(
serverUrl: String,
@@ -59,7 +60,8 @@
retryEnabled: Boolean,
retryHandler: RetryHandler,
authTokenKey: String,
- authTokenValue: String
+ authTokenValue: String,
+ isSSL: Boolean = false
) = {
this()
this.serverUrl = serverUrl
@@ -78,6 +80,7 @@
this.retryHandler = retryHandler
this.authTokenKey = authTokenKey
this.authTokenValue = authTokenValue
+ this.ssl = isSSL
authenticationStrategy match {
case ab: AbstractAuthenticationStrategy => ab.setClientConfig(this)
case _ =>
@@ -123,4 +126,6 @@
def getRetryHandler: RetryHandler = retryHandler
+ def isSSL: Boolean = ssl
+
}
diff --git a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
index b1fc579..a574b89 100644
--- a/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
+++ b/linkis-commons/linkis-httpclient/src/main/scala/org/apache/linkis/httpclient/config/ClientConfigBuilder.scala
@@ -40,6 +40,8 @@
protected var maxConnection: Int = _
protected var retryEnabled: Boolean = true
+ protected var ssl: Boolean = false
+
protected var retryHandler: RetryHandler = {
val retryHandler = new DefaultRetryHandler
retryHandler.addRetryException(classOf[LinkisRetryException])
@@ -112,6 +114,11 @@
this
}
+ def setSSL(isSSL: Boolean): this.type = {
+ this.ssl = isSSL
+ this
+ }
+
def build(): ClientConfig = new ClientConfig(
serverUrl,
discoveryEnabled,
@@ -126,7 +133,8 @@
retryEnabled,
retryHandler,
authTokenKey,
- authTokenValue
+ authTokenValue,
+ ssl
)
}