You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2013/04/22 18:56:21 UTC
svn commit: r1470617 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/tools/ lucene/tools/forbiddenApis/ solr/ solr/core/
solr/core/src/java/org/apache/solr/servlet/
solr/core/src/test/org/apache/solr/servlet/ solr/example/
solr/example/solr/coll...
Author: rmuir
Date: Mon Apr 22 16:56:20 2013
New Revision: 1470617
URL: http://svn.apache.org/r1470617
Log:
SOLR-2079: Add option to pass HttpServletRequest in the SolrQueryRequest context map
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/tools/ (props changed)
lucene/dev/branches/branch_4x/lucene/tools/forbiddenApis/servlet-api.txt
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
lucene/dev/branches/branch_4x/solr/example/ (props changed)
lucene/dev/branches/branch_4x/solr/example/solr/collection1/conf/solrconfig.xml
Modified: lucene/dev/branches/branch_4x/lucene/tools/forbiddenApis/servlet-api.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/tools/forbiddenApis/servlet-api.txt?rev=1470617&r1=1470616&r2=1470617&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/tools/forbiddenApis/servlet-api.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/tools/forbiddenApis/servlet-api.txt Mon Apr 22 16:56:20 2013
@@ -20,6 +20,8 @@ javax.servlet.ServletRequest#getParamete
javax.servlet.ServletRequest#getParameterNames()
javax.servlet.ServletRequest#getParameterValues(java.lang.String)
+javax.servlet.http.HttpServletRequest#getSession() @ Servlet API getter has side effect of creating sessions
+
@defaultMessage Servlet API method is broken and slow in some environments (e.g., Jetty's UTF-8 readers)
javax.servlet.ServletRequest#getReader()
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1470617&r1=1470616&r2=1470617&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Mon Apr 22 16:56:20 2013
@@ -50,6 +50,9 @@ Other Changes
* SOLR-4737: Update Guava to 14.0.1 (Mark Miller)
+* SOLR-2079: Add option to pass HttpServletRequest in the SolrQueryRequest context map.
+ (Tomás Fernández Löbbe via Robert Muir)
+
================== 4.3.0 ==================
Versions of Major Components
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java?rev=1470617&r1=1470616&r2=1470617&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java Mon Apr 22 16:56:20 2013
@@ -72,7 +72,8 @@ public class SolrRequestParsers
private final boolean enableRemoteStreams;
private StandardRequestParser standard;
private boolean handleSelect = true;
-
+ private boolean addHttpRequestToContext;
+
/** Default instance for e.g. admin requests. Limits to 2 MB uploads and does not allow remote streams. */
public static final SolrRequestParsers DEFAULT = new SolrRequestParsers();
@@ -86,6 +87,7 @@ public class SolrRequestParsers
multipartUploadLimitKB = formUploadLimitKB = Integer.MAX_VALUE;
enableRemoteStreams = true;
handleSelect = true;
+ addHttpRequestToContext = false;
} else {
multipartUploadLimitKB = globalConfig.getInt(
"requestDispatcher/requestParsers/@multipartUploadLimitInKB", 2048 );
@@ -99,6 +101,9 @@ public class SolrRequestParsers
// Let this filter take care of /select?xxx format
handleSelect = globalConfig.getBool(
"requestDispatcher/@handleSelect", true );
+
+ addHttpRequestToContext = globalConfig.getBool(
+ "requestDispatcher/requestParsers/@addHttpRequestToContext", false );
}
init(multipartUploadLimitKB, formUploadLimitKB);
}
@@ -106,6 +111,7 @@ public class SolrRequestParsers
private SolrRequestParsers() {
enableRemoteStreams = false;
handleSelect = false;
+ addHttpRequestToContext = false;
init(2048, 2048);
}
@@ -139,6 +145,10 @@ public class SolrRequestParsers
// Handlers and login will want to know the path. If it contains a ':'
// the handler could use it for RESTful URLs
sreq.getContext().put( "path", path );
+
+ if(addHttpRequestToContext) {
+ sreq.getContext().put("httpRequest", req);
+ }
return sreq;
}
@@ -342,6 +352,14 @@ public class SolrRequestParsers
public void setHandleSelect(boolean handleSelect) {
this.handleSelect = handleSelect;
}
+
+ public boolean isAddRequestHeadersToContext() {
+ return addHttpRequestToContext;
+ }
+
+ public void setAddRequestHeadersToContext(boolean addRequestHeadersToContext) {
+ this.addHttpRequestToContext = addRequestHeadersToContext;
+ }
}
//-----------------------------------------------------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java?rev=1470617&r1=1470616&r2=1470617&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/servlet/SolrRequestParserTest.java Mon Apr 22 16:56:20 2013
@@ -30,6 +30,7 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.Vector;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
@@ -314,4 +315,32 @@ public class SolrRequestParserTest exten
assertEquals(500, solre.code());
}
}
+
+ @Test
+ public void testAddHttpRequestToContext() throws Exception {
+ HttpServletRequest request = createMock(HttpServletRequest.class);
+ expect(request.getMethod()).andReturn("GET").anyTimes();
+ expect(request.getContentType()).andReturn( "application/x-www-form-urlencoded" ).anyTimes();
+ expect(request.getQueryString()).andReturn("q=title:solr").anyTimes();
+ Map<String, String> headers = new HashMap<String,String>();
+ headers.put("X-Forwarded-For", "10.0.0.1");
+ expect(request.getHeaderNames()).andReturn(new Vector<String>(headers.keySet()).elements()).anyTimes();
+ for(Map.Entry<String,String> entry:headers.entrySet()) {
+ Vector<String> v = new Vector<String>();
+ v.add(entry.getValue());
+ expect(request.getHeaders(entry.getKey())).andReturn(v.elements()).anyTimes();
+ }
+ replay(request);
+
+ SolrRequestParsers parsers = new SolrRequestParsers(h.getCore().getSolrConfig());
+ assertFalse(parsers.isAddRequestHeadersToContext());
+ SolrQueryRequest solrReq = parsers.parse(h.getCore(), "/select", request);
+ assertFalse(solrReq.getContext().containsKey("httpRequest"));
+
+ parsers.setAddRequestHeadersToContext(true);
+ solrReq = parsers.parse(h.getCore(), "/select", request);
+ assertEquals(request, solrReq.getContext().get("httpRequest"));
+ assertEquals("10.0.0.1", ((HttpServletRequest)solrReq.getContext().get("httpRequest")).getHeaders("X-Forwarded-For").nextElement());
+
+ }
}
Modified: lucene/dev/branches/branch_4x/solr/example/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/example/solr/collection1/conf/solrconfig.xml?rev=1470617&r1=1470616&r2=1470617&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/example/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/branch_4x/solr/example/solr/collection1/conf/solrconfig.xml Mon Apr 22 16:56:20 2013
@@ -700,6 +700,13 @@
POST. You can use POST to pass request parameters not
fitting into the URL.
+ addHttpRequestToContext - if set to true, it will instruct
+ the requestParsers to include the original HttpServletRequest
+ object in the context map of the SolrQueryRequest under the
+ key "httpRequest". It will not be used by any of the existing
+ Solr components, but may be useful when developing custom
+ plugins.
+
*** WARNING ***
The settings below authorize Solr to fetch remote files, You
should make sure your system has some authentication before
@@ -708,7 +715,8 @@
-->
<requestParsers enableRemoteStreaming="true"
multipartUploadLimitInKB="2048000"
- formdataUploadLimitInKB="2048"/>
+ formdataUploadLimitInKB="2048"
+ addHttpRequestToContext="false"/>
<!-- HTTP Caching