You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by an...@apache.org on 2015/09/16 20:16:59 UTC

svn commit: r1703441 - in /lucene/dev/trunk/solr: ./ core/src/java/org/apache/solr/client/solrj/embedded/ core/src/java/org/apache/solr/servlet/ core/src/test/org/apache/solr/cloud/ webapp/web/WEB-INF/

Author: anshum
Date: Wed Sep 16 18:16:58 2015
New Revision: 1703441

URL: http://svn.apache.org/r1703441
Log:
SOLR-8058: Fix the exclusion filter so that collections that start with js, css, img, tpl can be accessed.

Added:
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/TestExclusionRuleCollectionAccess.java   (with props)
Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
    lucene/dev/trunk/solr/webapp/web/WEB-INF/web.xml

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1703441&r1=1703440&r2=1703441&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Sep 16 18:16:58 2015
@@ -205,6 +205,8 @@ Bug Fixes
   when parallelUpdates is enabled (default) and multiple docs are sent as a single update.
   (kevin, hossman, shalin)
 
+* SOLR-8058: Fix the exclusion filter so that collections that start with js, css, img, tpl
+  can be accessed. (Upayavira, Steve Rowe, Anshum Gupta) 
 
 Optimizations
 ----------------------

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java?rev=1703441&r1=1703440&r2=1703441&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java Wed Sep 16 18:16:58 2015
@@ -28,6 +28,7 @@ import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.server.session.HashSessionIdManager;
+import org.eclipse.jetty.servlet.BaseHolder;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -85,6 +86,8 @@ public class JettySolrRunner {
   private volatile boolean startedBefore = false;
 
   private LinkedList<FilterHolder> extraFilters;
+
+  private static final String excludePatterns = "/css/.+,/js/.+,/img/.+,/tpl/.+";
   
   private int proxyPort = -1;
 
@@ -333,9 +336,10 @@ public class JettySolrRunner {
           String pathSpec = config.extraServlets.get(servletHolder);
           root.addServlet(servletHolder, pathSpec);
         }
-
-        dispatchFilter = root.addFilter(SolrDispatchFilter.class, "*", EnumSet.of(DispatcherType.REQUEST) );
-
+        dispatchFilter = root.getServletHandler().newFilterHolder(BaseHolder.Source.EMBEDDED);
+        dispatchFilter.setHeldClass(SolrDispatchFilter.class);
+        dispatchFilter.setInitParameter("excludePatterns", excludePatterns);
+        root.addFilter(dispatchFilter, "*", EnumSet.of(DispatcherType.REQUEST));
       }
 
       @Override

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1703441&r1=1703440&r2=1703441&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Wed Sep 16 18:16:58 2015
@@ -195,9 +195,13 @@ public class SolrDispatchFilter extends
 
     // No need to even create the HttpSolrCall object if this path is excluded.
     if(excludePatterns != null) {
-      String servletPath = ((HttpServletRequest) request).getServletPath();
+      String requestPath = ((HttpServletRequest) request).getServletPath();
+      String extraPath = ((HttpServletRequest)request).getPathInfo();
+      if (extraPath != null) { // In embedded mode, servlet path is empty - include all post-context path here for testing 
+        requestPath += extraPath;
+      }
       for (Pattern p : excludePatterns) {
-        Matcher matcher = p.matcher(servletPath);
+        Matcher matcher = p.matcher(requestPath);
         if (matcher.lookingAt()) {
           chain.doFilter(request, response);
           return;

Added: lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/TestExclusionRuleCollectionAccess.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/TestExclusionRuleCollectionAccess.java?rev=1703441&view=auto
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/TestExclusionRuleCollectionAccess.java (added)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/TestExclusionRuleCollectionAccess.java Wed Sep 16 18:16:58 2015
@@ -0,0 +1,50 @@
+package org.apache.solr.cloud;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.junit.Test;
+
+@LuceneTestCase.Slow
+public class TestExclusionRuleCollectionAccess extends AbstractFullDistribZkTestBase {
+
+  public TestExclusionRuleCollectionAccess() {
+    schemaString = "schema15.xml";      // we need a string id
+    sliceCount = 1;
+  }
+
+  @Test
+  public void doTest() throws Exception {
+    CollectionAdminRequest.Create req = new CollectionAdminRequest.Create();
+    req.setCollectionName("css33");
+    req.setNumShards(1);
+    req.process(cloudClient);
+    
+    waitForRecoveriesToFinish("css33", false);
+    
+    try (SolrClient c = createCloudClient("css33")) {
+      c.add(getDoc("id", "1"));
+      c.commit();
+
+      assertEquals("Should have returned 1 result", 1, c.query(params("q", "*:*", "collection", "css33")).getResults().getNumFound());
+    }
+  }
+  
+}

Modified: lucene/dev/trunk/solr/webapp/web/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/webapp/web/WEB-INF/web.xml?rev=1703441&r1=1703440&r2=1703441&view=diff
==============================================================================
--- lucene/dev/trunk/solr/webapp/web/WEB-INF/web.xml (original)
+++ lucene/dev/trunk/solr/webapp/web/WEB-INF/web.xml Wed Sep 16 18:16:58 2015
@@ -56,7 +56,7 @@
     -->
     <init-param>
       <param-name>excludePatterns</param-name>
-      <param-value>/css/*,/js/*,/img/*,/tpl/*</param-value>
+      <param-value>/css/.+,/js/.+,/img/.+,/tpl/.+</param-value>
     </init-param>
   </filter>