From 8b0548aacc6b871ef799aa81632aa37bd351b4ec Mon Sep 17 00:00:00 2001 From: Kevin Risden <risdenk@users.noreply.github.com> Date: Wed, 11 Jan 2017 09:09:48 -0600 Subject: [PATCH] [solr,solr6] Add support for Kerberized Solr (#887) --- solr/pom.xml | 6 ++++++ .../src/main/java/com/yahoo/ycsb/db/solr/SolrClient.java | 9 +++++++++ solr6/pom.xml | 6 ++++++ .../main/java/com/yahoo/ycsb/db/solr6/SolrClient.java | 8 ++++++++ 4 files changed, 29 insertions(+) diff --git a/solr/pom.xml b/solr/pom.xml index a97baeb2..a8d18bed 100644 --- a/solr/pom.xml +++ b/solr/pom.xml @@ -48,6 +48,12 @@ LICENSE file. <artifactId>solr-solrj</artifactId> <version>${solr.version}</version> </dependency> + <!-- commons-codec required for Solr Kerberos support --> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.10</version> + </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> diff --git a/solr/src/main/java/com/yahoo/ycsb/db/solr/SolrClient.java b/solr/src/main/java/com/yahoo/ycsb/db/solr/SolrClient.java index f6a78e91..4232221b 100644 --- a/solr/src/main/java/com/yahoo/ycsb/db/solr/SolrClient.java +++ b/solr/src/main/java/com/yahoo/ycsb/db/solr/SolrClient.java @@ -25,7 +25,9 @@ import com.yahoo.ycsb.StringByteIterator; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.CloudSolrClient; +import org.apache.solr.client.solrj.impl.HttpClientUtil; import org.apache.solr.client.solrj.impl.HttpSolrClient; +import org.apache.solr.client.solrj.impl.Krb5HttpClientConfigurer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.client.solrj.SolrServerException; @@ -71,6 +73,13 @@ public class SolrClient extends DB { .parseInt(props.getProperty("solr.commit.within.time", DEFAULT_COMMIT_WITHIN_TIME)); batchMode = Boolean.parseBoolean(props.getProperty("solr.batch.mode", DEFAULT_BATCH_MODE)); + + String jaasConfPath = props.getProperty("solr.jaas.conf.path"); + if(jaasConfPath != null) { + System.setProperty("java.security.auth.login.config", jaasConfPath); + HttpClientUtil.setConfigurer(new Krb5HttpClientConfigurer()); + } + // Check if Solr cluster is running in SolrCloud or Stand-alone mode Boolean cloudMode = Boolean.parseBoolean(props.getProperty("solr.cloud", DEFAULT_CLOUD_MODE)); System.err.println("Solr Cloud Mode = " + cloudMode); diff --git a/solr6/pom.xml b/solr6/pom.xml index d4f947d1..42cd4e5a 100644 --- a/solr6/pom.xml +++ b/solr6/pom.xml @@ -48,6 +48,12 @@ LICENSE file. <artifactId>solr-solrj</artifactId> <version>${solr6.version}</version> </dependency> + <!-- commons-codec required for Solr Kerberos support --> + <dependency> + <groupId>commons-codec</groupId> + <artifactId>commons-codec</artifactId> + <version>1.10</version> + </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> diff --git a/solr6/src/main/java/com/yahoo/ycsb/db/solr6/SolrClient.java b/solr6/src/main/java/com/yahoo/ycsb/db/solr6/SolrClient.java index 0f18fa21..50346b78 100644 --- a/solr6/src/main/java/com/yahoo/ycsb/db/solr6/SolrClient.java +++ b/solr6/src/main/java/com/yahoo/ycsb/db/solr6/SolrClient.java @@ -25,7 +25,9 @@ import com.yahoo.ycsb.StringByteIterator; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.impl.CloudSolrClient; +import org.apache.solr.client.solrj.impl.HttpClientUtil; import org.apache.solr.client.solrj.impl.HttpSolrClient; +import org.apache.solr.client.solrj.impl.Krb5HttpClientConfigurer; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.client.solrj.response.UpdateResponse; import org.apache.solr.client.solrj.SolrServerException; @@ -71,6 +73,12 @@ public class SolrClient extends DB { .parseInt(props.getProperty("solr.commit.within.time", DEFAULT_COMMIT_WITHIN_TIME)); batchMode = Boolean.parseBoolean(props.getProperty("solr.batch.mode", DEFAULT_BATCH_MODE)); + String jaasConfPath = props.getProperty("solr.jaas.conf.path"); + if(jaasConfPath != null) { + System.setProperty("java.security.auth.login.config", jaasConfPath); + HttpClientUtil.setConfigurer(new Krb5HttpClientConfigurer()); + } + // Check if Solr cluster is running in SolrCloud or Stand-alone mode Boolean cloudMode = Boolean.parseBoolean(props.getProperty("solr.cloud", DEFAULT_CLOUD_MODE)); System.err.println("Solr Cloud Mode = " + cloudMode); -- GitLab