mirror of
				https://github.com/datahub-project/datahub.git
				synced 2025-10-31 18:59:23 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package utils;
 | |
| 
 | |
| import java.io.FileInputStream;
 | |
| import java.net.http.HttpClient;
 | |
| import java.security.KeyStore;
 | |
| import javax.net.ssl.SSLContext;
 | |
| import javax.net.ssl.TrustManagerFactory;
 | |
| import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 | |
| import org.apache.http.impl.client.CloseableHttpClient;
 | |
| import org.apache.http.impl.client.HttpClients;
 | |
| import org.slf4j.Logger;
 | |
| import org.slf4j.LoggerFactory;
 | |
| 
 | |
| public class CustomHttpClientFactory {
 | |
|   private static final Logger log =
 | |
|       LoggerFactory.getLogger(CustomHttpClientFactory.class.getName());
 | |
| 
 | |
|   public static SSLContext getSslContext(String path, String pass, String type) throws Exception {
 | |
|     return createSslContext(path, pass, type);
 | |
|   }
 | |
| 
 | |
|   public static HttpClient getJavaHttpClient(String path, String pass, String type) {
 | |
|     try {
 | |
|       log.info(
 | |
|           "Initializing Java HttpClient with custom truststore at '{}' and type '{}'", path, type);
 | |
|       return HttpClient.newBuilder().sslContext(getSslContext(path, pass, type)).build();
 | |
|     } catch (Exception e) {
 | |
|       log.warn(
 | |
|           "Failed to initialize Java HttpClient with custom truststore at '{}'. Falling back to default HttpClient. Reason: {}",
 | |
|           path,
 | |
|           e.getMessage(),
 | |
|           e);
 | |
|       return HttpClient.newBuilder().version(HttpClient.Version.HTTP_1_1).build();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   public static CloseableHttpClient getApacheHttpClient(String path, String pass, String type) {
 | |
|     try {
 | |
|       log.info(
 | |
|           "Initializing Apache CloseableHttpClient with custom truststore at '{}' and type '{}'",
 | |
|           path,
 | |
|           type);
 | |
|       return HttpClients.custom()
 | |
|           .setSSLSocketFactory(new SSLConnectionSocketFactory(getSslContext(path, pass, type)))
 | |
|           .build();
 | |
|     } catch (Exception e) {
 | |
|       log.warn(
 | |
|           "Failed to initialize Apache HttpClient with custom truststore at '{}'. Falling back to default HttpClient. Reason: {}",
 | |
|           path,
 | |
|           e.getMessage(),
 | |
|           e);
 | |
|       return HttpClients.createDefault();
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   public static SSLContext createSslContext(
 | |
|       String truststorePath, String truststorePassword, String truststoreType) throws Exception {
 | |
|     log.info(
 | |
|         "Creating SSLContext with truststore at '{}' and type '{}'",
 | |
|         truststorePath,
 | |
|         truststoreType);
 | |
|     KeyStore trustStore = KeyStore.getInstance(truststoreType);
 | |
|     try (FileInputStream fis = new FileInputStream(truststorePath)) {
 | |
|       trustStore.load(fis, truststorePassword.toCharArray());
 | |
|     }
 | |
|     TrustManagerFactory tmf =
 | |
|         TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
 | |
|     tmf.init(trustStore);
 | |
|     SSLContext sslContext = SSLContext.getInstance("TLS");
 | |
|     sslContext.init(null, tmf.getTrustManagers(), null);
 | |
|     return sslContext;
 | |
|   }
 | |
| }
 | 
