You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2015/11/26 12:46:12 UTC

svn commit: r1716611 - in /felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal: dispatch/ service/ whiteboard/

Author: cziegeler
Date: Thu Nov 26 11:46:11 2015
New Revision: 1716611

URL: http://svn.apache.org/viewvc?rev=1716611&view=rev
Log:
FELIX-5093 : HttpServletRequest.getRequestURI is broken for escaped char in URL since 3.1.0

Modified:
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestInfo.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletRequestWrapper.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletResponseWrapper.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/ServletContextImpl.java
    felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java?rev=1716611&r1=1716610&r2=1716611&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/Dispatcher.java Thu Nov 26 11:46:11 2015
@@ -81,7 +81,7 @@ public final class Dispatcher
             }
         }
 
-        // get full path
+        // get full decoded path for dispatching
         // we can't use req.getRequestURI() or req.getRequestURL() as these are returning the encoded path
         String path = req.getServletPath();
         if ( path == null )
@@ -107,7 +107,7 @@ public final class Dispatcher
         }
 
         final ExtServletContext servletContext = pr.handler.getContext();
-        final RequestInfo requestInfo = new RequestInfo(pr.servletPath, pr.pathInfo, null);
+        final RequestInfo requestInfo = new RequestInfo(pr.servletPath, pr.pathInfo, null, req.getRequestURI());
 
         final HttpServletRequest wrappedRequest = new ServletRequestWrapper(req, servletContext, requestInfo, null,
                 pr.handler.getContextServiceId(),

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestInfo.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestInfo.java?rev=1716611&r1=1716610&r2=1716611&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestInfo.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/RequestInfo.java Thu Nov 26 11:46:11 2015
@@ -16,10 +16,6 @@
  */
 package org.apache.felix.http.base.internal.dispatch;
 
-import static org.apache.felix.http.base.internal.util.UriUtils.concat;
-
-import org.apache.felix.http.base.internal.util.UriUtils;
-
 public final class RequestInfo
 {
     final String servletPath;
@@ -27,12 +23,15 @@ public final class RequestInfo
     final String queryString;
     final String requestURI;
 
-    public RequestInfo(String servletPath, String pathInfo, String queryString)
+    public RequestInfo(final String servletPath,
+            final String pathInfo,
+            final String queryString,
+            final String requestURI)
     {
         this.servletPath = servletPath;
         this.pathInfo = pathInfo;
         this.queryString = queryString;
-        this.requestURI = UriUtils.compactPath(concat(servletPath, pathInfo));
+        this.requestURI = requestURI;
     }
 
     @Override

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletRequestWrapper.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletRequestWrapper.java?rev=1716611&r1=1716610&r2=1716611&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletRequestWrapper.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletRequestWrapper.java Thu Nov 26 11:46:11 2015
@@ -51,12 +51,12 @@ final class ServletRequestWrapper extend
     private final ExtServletContext servletContext;
     private final long contextId;
     private final boolean asyncSupported;
-    
-    public ServletRequestWrapper(HttpServletRequest req, 
-    		ExtServletContext servletContext, 
+
+    public ServletRequestWrapper(HttpServletRequest req,
+    		ExtServletContext servletContext,
     		RequestInfo requestInfo,
-            DispatcherType type, 
-            final Long contextId, 
+            DispatcherType type,
+            final Long contextId,
             final boolean asyncSupported)
     {
         super(req);
@@ -78,7 +78,7 @@ final class ServletRequestWrapper extend
             // meaning that the request information comes from the *original* request...
             if (INCLUDE_REQUEST_URI.equals(name))
             {
-                return concat(request.getContextPath(), this.requestInfo.requestURI);
+                return this.requestInfo.requestURI;
             }
             else if (INCLUDE_CONTEXT_PATH.equals(name))
             {
@@ -202,7 +202,7 @@ final class ServletRequestWrapper extend
         {
             return super.getRequestURI();
         }
-        return concat(getContextPath(), this.requestInfo.requestURI);
+        return this.requestInfo.requestURI;
     }
 
     @Override

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletResponseWrapper.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletResponseWrapper.java?rev=1716611&r1=1716610&r2=1716611&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletResponseWrapper.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/dispatch/ServletResponseWrapper.java Thu Nov 26 11:46:11 2015
@@ -101,7 +101,7 @@ final class ServletResponseWrapper exten
                         final String pathInfo = request.getRequestURI();
                         final String queryString = null; // XXX
 
-                        final RequestInfo requestInfo = new RequestInfo(servletPath, pathInfo, queryString);
+                        final RequestInfo requestInfo = new RequestInfo(servletPath, pathInfo, queryString, pathInfo);
 
                         final FilterHandler[] filterHandlers = errorRegistry.getFilterHandlers(errorResolution, DispatcherType.ERROR, request.getRequestURI());
 

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/ServletContextImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/ServletContextImpl.java?rev=1716611&r1=1716610&r2=1716611&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/ServletContextImpl.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/service/ServletContextImpl.java Thu Nov 26 11:46:11 2015
@@ -58,6 +58,7 @@ import org.apache.felix.http.base.intern
 import org.apache.felix.http.base.internal.registry.PerContextHandlerRegistry;
 import org.apache.felix.http.base.internal.registry.ServletResolution;
 import org.apache.felix.http.base.internal.util.MimeTypes;
+import org.apache.felix.http.base.internal.util.UriUtils;
 import org.osgi.framework.Bundle;
 import org.osgi.service.http.HttpContext;
 
@@ -517,7 +518,7 @@ public class ServletContextImpl implemen
         	resolution.handler = servletHandler;
             resolution.handlerRegistry = this.handlerRegistry;
             // TODO - what is the path of a named servlet?
-            final RequestInfo requestInfo = new RequestInfo("", null, null);
+            final RequestInfo requestInfo = new RequestInfo("", null, null, null);
             dispatcher = new RequestDispatcherImpl(resolution, requestInfo);
         }
         else
@@ -544,11 +545,8 @@ public class ServletContextImpl implemen
             path = path.substring(0, q);
         }
         // TODO remove path parameters...
-        String requestURI = decodePath(removeDotSegments(path));
-        if ( requestURI == null )
-        {
-            requestURI = "";
-        }
+        final String encodedRequestURI = path == null ? "" : removeDotSegments(path);
+        final String requestURI = decodePath(encodedRequestURI);
 
         final RequestDispatcher dispatcher;
         final PathResolution pathResolution = this.handlerRegistry.resolve(requestURI);
@@ -557,7 +555,7 @@ public class ServletContextImpl implemen
         	final ServletResolution resolution = new ServletResolution();
         	resolution.handler = pathResolution.handler;
             resolution.handlerRegistry = this.handlerRegistry;
-            final RequestInfo requestInfo = new RequestInfo(pathResolution.servletPath, pathResolution.pathInfo, query);
+            final RequestInfo requestInfo = new RequestInfo(pathResolution.servletPath, pathResolution.pathInfo, query, UriUtils.concat(this.getContextPath(), encodedRequestURI));
             dispatcher = new RequestDispatcherImpl(resolution, requestInfo);
         }
         else

Modified: felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java?rev=1716611&r1=1716610&r2=1716611&view=diff
==============================================================================
--- felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java (original)
+++ felix/trunk/http/base/src/main/java/org/apache/felix/http/base/internal/whiteboard/SharedServletContextImpl.java Thu Nov 26 11:46:11 2015
@@ -49,6 +49,7 @@ import org.apache.felix.http.base.intern
 import org.apache.felix.http.base.internal.registry.PathResolution;
 import org.apache.felix.http.base.internal.registry.PerContextHandlerRegistry;
 import org.apache.felix.http.base.internal.registry.ServletResolution;
+import org.apache.felix.http.base.internal.util.UriUtils;
 
 /**
  * This servlet context implementation represents the shared
@@ -318,7 +319,7 @@ public class SharedServletContextImpl im
         	resolution.handler = servletHandler;
             resolution.handlerRegistry = this.registry;
             // TODO - what is the path of a named servlet?
-            final RequestInfo requestInfo = new RequestInfo("", null, null);
+            final RequestInfo requestInfo = new RequestInfo("", null, null, null);
             dispatcher = new RequestDispatcherImpl(resolution, requestInfo);
         }
         else
@@ -345,11 +346,8 @@ public class SharedServletContextImpl im
             path = path.substring(0, q);
         }
         // TODO remove path parameters...
-        String requestURI = decodePath(removeDotSegments(path));
-        if ( requestURI == null )
-        {
-            requestURI = "";
-        }
+        final String encodedRequestURI = path == null ? "" : removeDotSegments(path);
+        final String requestURI = decodePath(encodedRequestURI);
 
         final RequestDispatcher dispatcher;
         final PathResolution pathResolution = this.registry.resolve(requestURI);
@@ -358,7 +356,8 @@ public class SharedServletContextImpl im
         	final ServletResolution resolution = new ServletResolution();
         	resolution.handler = pathResolution.handler;
             resolution.handlerRegistry = this.registry;
-            final RequestInfo requestInfo = new RequestInfo(pathResolution.servletPath, pathResolution.pathInfo, query);
+            final RequestInfo requestInfo = new RequestInfo(pathResolution.servletPath, pathResolution.pathInfo, query,
+                    UriUtils.concat(this.contextPath, encodedRequestURI));
             dispatcher = new RequestDispatcherImpl(resolution, requestInfo);
         }
         else
@@ -426,6 +425,7 @@ public class SharedServletContextImpl im
         return this.context.getSessionCookieConfig();
     }
 
+    @SuppressWarnings("deprecation")
     @Override
     public void log(final Exception cause, final String message)
     {