119 lines
5.8 KiB
Java
119 lines
5.8 KiB
Java
package eu.eudat.configurations;
|
|
|
|
import org.apache.http.HttpHost;
|
|
import org.apache.http.auth.AuthScope;
|
|
import org.apache.http.auth.UsernamePasswordCredentials;
|
|
import org.apache.http.client.CredentialsProvider;
|
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
|
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
|
|
import org.apache.http.impl.client.BasicCredentialsProvider;
|
|
import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager;
|
|
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
|
|
import org.apache.http.nio.reactor.IOReactorException;
|
|
import org.apache.http.nio.reactor.IOReactorExceptionHandler;
|
|
import org.apache.http.ssl.SSLContextBuilder;
|
|
import org.apache.http.ssl.SSLContexts;
|
|
import org.elasticsearch.client.RestClient;
|
|
import org.elasticsearch.client.RestHighLevelClient;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.context.annotation.Bean;
|
|
import org.springframework.context.annotation.Configuration;
|
|
import org.springframework.core.env.Environment;
|
|
|
|
import javax.net.ssl.SSLContext;
|
|
import javax.net.ssl.TrustManagerFactory;
|
|
import java.io.FileInputStream;
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.security.KeyStore;
|
|
import java.security.cert.Certificate;
|
|
import java.security.cert.CertificateFactory;
|
|
|
|
/**
|
|
* Created by ikalyvas on 7/5/2018.
|
|
*/
|
|
@Configuration
|
|
public class ElasticSearchConfiguration {
|
|
private static final Logger logger = LoggerFactory.getLogger(ElasticSearchConfiguration.class);
|
|
|
|
private Environment environment;
|
|
|
|
@Autowired
|
|
public ElasticSearchConfiguration(Environment environment) {
|
|
this.environment = environment;
|
|
}
|
|
|
|
@Bean(destroyMethod = "close")
|
|
public RestHighLevelClient client() throws Exception {
|
|
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
|
|
credentialsProvider.setCredentials(AuthScope.ANY,
|
|
new UsernamePasswordCredentials(this.environment.getProperty("elasticsearch.username"), this.environment.getProperty("elasticsearch.password")));
|
|
|
|
try {
|
|
DefaultConnectingIOReactor ioReactor = new DefaultConnectingIOReactor();
|
|
ioReactor.setExceptionHandler(new IOReactorExceptionHandler() {
|
|
@Override
|
|
public boolean handle(IOException e) {
|
|
logger.warn("System may be unstable: IOReactor encountered a checked exception : " + e.getMessage(), e);
|
|
return true; // Return true to note this exception as handled, it will not be re-thrown
|
|
}
|
|
|
|
@Override
|
|
public boolean handle(RuntimeException e) {
|
|
logger.warn("System may be unstable: IOReactor encountered a runtime exception : " + e.getMessage(), e);
|
|
return true; // Return true to note this exception as handled, it will not be re-thrown
|
|
}
|
|
});
|
|
|
|
RestHighLevelClient client;
|
|
if(this.environment.getProperty("elasticsearch.usingssl", Boolean.class)){
|
|
|
|
// Path caCertificatePath = Paths.get(this.environment.getProperty("elasticsearch.certPath"));
|
|
// CertificateFactory factory =
|
|
// CertificateFactory.getInstance("X.509");
|
|
// Certificate trustedCa;
|
|
// try (InputStream is = Files.newInputStream(caCertificatePath)) {
|
|
// trustedCa = factory.generateCertificate(is);
|
|
// }
|
|
// KeyStore trustStore = KeyStore.getInstance("pkcs12");
|
|
// trustStore.load(null, null);
|
|
// trustStore.setCertificateEntry("ca", trustedCa);
|
|
//
|
|
// TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
|
|
// tmf.init(trustStore);
|
|
//
|
|
// SSLContext sslContext = SSLContext.getInstance("TLS");
|
|
// sslContext.init(null, tmf.getTrustManagers(), null);
|
|
|
|
SSLContextBuilder sslBuilder = SSLContexts.custom()
|
|
.loadTrustMaterial(null, (x509Certificates, s) -> true);
|
|
final SSLContext sslContext = sslBuilder.build();
|
|
client = new RestHighLevelClient(
|
|
RestClient.builder(
|
|
new HttpHost(this.environment.getProperty("elasticsearch.host"),
|
|
Integer.parseInt(this.environment.getProperty("elasticsearch.port")), "https"))
|
|
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
|
|
.setDefaultCredentialsProvider(credentialsProvider).setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).setSSLContext(sslContext))
|
|
.setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder.setConnectTimeout(5000).setSocketTimeout(120000))
|
|
);
|
|
}
|
|
else {
|
|
client = new RestHighLevelClient(
|
|
RestClient.builder(
|
|
new HttpHost(this.environment.getProperty("elasticsearch.host"),
|
|
Integer.parseInt(this.environment.getProperty("elasticsearch.port")), "http"))
|
|
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
|
|
.setDefaultCredentialsProvider(credentialsProvider).setConnectionManager(new PoolingNHttpClientConnectionManager(ioReactor))));
|
|
}
|
|
return client;
|
|
}catch (IOReactorException ex) {
|
|
throw new RuntimeException(ex);
|
|
}
|
|
}
|
|
}
|