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)
{