Index: src/java/org/apache/nutch/indexer/solr/SolrDeleteDuplicates.java
===================================================================
--- src/java/org/apache/nutch/indexer/solr/SolrDeleteDuplicates.java	(revision 1143472)
+++ src/java/org/apache/nutch/indexer/solr/SolrDeleteDuplicates.java	(working copy)
@@ -47,7 +47,6 @@
 import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocument;
@@ -188,7 +187,7 @@
 
     /** Return each index as a split. */
     public InputSplit[] getSplits(JobConf job, int numSplits) throws IOException {
-      SolrServer solr = new CommonsHttpSolrServer(job.get(SolrConstants.SERVER_URL));
+      SolrServer solr = SolrUtils.getCommonsHttpSolrServer(job);
 
       final SolrQuery solrQuery = new SolrQuery(SOLR_GET_ALL_QUERY);
       solrQuery.setFields(SolrConstants.ID_FIELD);
@@ -219,7 +218,7 @@
         Reporter reporter)
         throws IOException {
 
-      SolrServer solr = new CommonsHttpSolrServer(job.get(SolrConstants.SERVER_URL));
+      SolrServer solr = SolrUtils.getCommonsHttpSolrServer(job);
       SolrInputSplit solrSplit = (SolrInputSplit) split;
       final int numDocs = solrSplit.getNumDocs();
       
@@ -298,7 +297,7 @@
 
   public void configure(JobConf job) {
     try {
-      solr = new CommonsHttpSolrServer(job.get(SolrConstants.SERVER_URL));
+      solr = SolrUtils.getCommonsHttpSolrServer(job);
       noCommit = job.getBoolean("noCommit", false);
     } catch (MalformedURLException e) {
       throw new RuntimeException(e);
Index: src/java/org/apache/nutch/indexer/solr/SolrClean.java
===================================================================
--- src/java/org/apache/nutch/indexer/solr/SolrClean.java	(revision 1143472)
+++ src/java/org/apache/nutch/indexer/solr/SolrClean.java	(working copy)
@@ -45,7 +45,6 @@
 import org.apache.nutch.util.TimingUtil;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 
 /**
@@ -102,7 +101,7 @@
     @Override
     public void configure(JobConf job) {
       try {
-        solr = new CommonsHttpSolrServer(job.get(SolrConstants.SERVER_URL));
+        solr = SolrUtils.getCommonsHttpSolrServer(job);
         noCommit = job.getBoolean("noCommit", false);
       } catch (MalformedURLException e) {
         throw new RuntimeException(e);
Index: src/java/org/apache/nutch/indexer/solr/SolrConstants.java
===================================================================
--- src/java/org/apache/nutch/indexer/solr/SolrConstants.java	(revision 1143472)
+++ src/java/org/apache/nutch/indexer/solr/SolrConstants.java	(working copy)
@@ -24,6 +24,12 @@
   public static final String COMMIT_SIZE = SOLR_PREFIX + "commit.size";
 
   public static final String MAPPING_FILE = SOLR_PREFIX + "mapping.file";
+
+  public static final String USE_AUTH = SOLR_PREFIX + "auth";
+
+  public static final String USERNAME = SOLR_PREFIX + "auth.username";
+
+  public static final String PASSWORD = SOLR_PREFIX + "auth.password";
   
   public static final String ID_FIELD = "id";
   
Index: src/java/org/apache/nutch/indexer/solr/SolrWriter.java
===================================================================
--- src/java/org/apache/nutch/indexer/solr/SolrWriter.java	(revision 1143472)
+++ src/java/org/apache/nutch/indexer/solr/SolrWriter.java	(working copy)
@@ -30,7 +30,6 @@
 import org.apache.nutch.indexer.NutchIndexWriter;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.util.DateUtil;
 
@@ -47,7 +46,7 @@
   private int commitSize;
 
   public void open(JobConf job, String name) throws IOException {
-    solr = new CommonsHttpSolrServer(job.get(SolrConstants.SERVER_URL));
+    solr = SolrUtils.getCommonsHttpSolrServer(job);
     commitSize = job.getInt(SolrConstants.COMMIT_SIZE, 1000);
     solrMapping = SolrMappingReader.getInstance(job);
   }
@@ -64,7 +63,7 @@
         }
 
         if (e.getKey().equals("content")) {
-          val2 = stripNonCharCodepoints((String)val);
+          val2 = SolrUtils.stripNonCharCodepoints((String)val);
         }
 
         inputDoc.addField(solrMapping.mapKey(e.getKey()), val2, e.getValue().getWeight());
@@ -105,26 +104,4 @@
     ioe.initCause(e);
     return ioe;
   }
-
-  public static String stripNonCharCodepoints(String input) {
-    StringBuilder retval = new StringBuilder();
-    char ch;
-
-    for (int i = 0; i < input.length(); i++) {
-      ch = input.charAt(i);
-
-      // Strip all non-characters http://unicode.org/cldr/utility/list-unicodeset.jsp?a=[:Noncharacter_Code_Point=True:]
-      // and non-printable control characters except tabulator, new line and carriage return
-      if (ch % 0x10000 != 0xffff && // 0xffff - 0x10ffff range step 0x10000
-          ch % 0x10000 != 0xfffe && // 0xfffe - 0x10fffe range
-          (ch <= 0xfdd0 || ch >= 0xfdef) && // 0xfdd0 - 0xfdef
-          (ch > 0x1F || ch == 0x9 || ch == 0xa || ch == 0xd)) {
-
-        retval.append(ch);
-      }
-    }
-
-    return retval.toString();
-  }
-
 }
Index: src/java/org/apache/nutch/indexer/solr/SolrIndexer.java
===================================================================
--- src/java/org/apache/nutch/indexer/solr/SolrIndexer.java	(revision 1143472)
+++ src/java/org/apache/nutch/indexer/solr/SolrIndexer.java	(working copy)
@@ -36,7 +36,6 @@
 import org.apache.nutch.util.NutchJob;
 import org.apache.nutch.util.TimingUtil;
 import org.apache.solr.client.solrj.SolrServer;
-import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
@@ -84,7 +83,7 @@
     try {
       JobClient.runJob(job);
       // do the commits once and for all the reducers in one go
-      SolrServer solr =  new CommonsHttpSolrServer(solrUrl);
+      SolrServer solr =  SolrUtils.getCommonsHttpSolrServer(job);
 
       if (!noCommit) {
         solr.commit();
Index: conf/nutch-default.xml
===================================================================
--- conf/nutch-default.xml	(revision 1143472)
+++ conf/nutch-default.xml	(working copy)
@@ -1047,4 +1047,13 @@
   </description>  
 </property> 
 
+<property>
+  <name>solr.auth</name>
+  <value>false</value>
+  <description>
+  Whether to enable HTTP basic authentication for communicating with Solr.
+  Use the solr.auth.username and solr.auth.password properties to configure
+  your credentials.
+  </description>
+</property>
 </configuration>
