Author: fmeschbe
Date: Thu Jun 26 07:08:26 2008
New Revision: 671908
URL: http://svn.apache.org/viewvc?rev=671908&view=rev
Log:
SLING-559: Use ParameterSupport also during handleSecurity, store
ParameterSupport as request attribute and access the per-request
instance through a factory crearing the instance on-demand should
the attribute not be present
Modified:
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
Modified:
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java?rev=671908&r1=671907&r2=671908&view=diff
==============================================================================
---
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
(original)
+++
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/SlingMainServlet.java
Thu Jun 26 07:08:26 2008
@@ -32,6 +32,7 @@
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
import javax.jcr.Session;
import javax.servlet.Filter;
@@ -44,6 +45,7 @@
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import org.apache.sling.api.SlingException;
@@ -63,6 +65,7 @@
import org.apache.sling.engine.impl.helper.SlingFilterConfig;
import org.apache.sling.engine.impl.helper.SlingServletContext;
import org.apache.sling.engine.impl.log.RequestLogger;
+import org.apache.sling.engine.impl.parameters.ParameterSupport;
import org.apache.sling.engine.impl.request.ContentData;
import org.apache.sling.engine.impl.request.RequestData;
import org.apache.sling.engine.servlets.AbstractServiceReferenceConfig;
@@ -767,6 +770,34 @@
if (authenticator != null) {
try {
+ // SLING-559: ensure correct parameter handling according to
+ // ParameterSupport
+ request = new HttpServletRequestWrapper(request) {
+ @Override
+ public String getParameter(String name) {
+ return getParameterSupport().getParameter(name);
+ }
+
+ @Override
+ public Map<String, String[]> getParameterMap() {
+ return getParameterSupport().getParameterMap();
+ }
+
+ @Override
+ public Enumeration<String> getParameterNames() {
+ return getParameterSupport().getParameterNames();
+ }
+
+ @Override
+ public String[] getParameterValues(String name) {
+ return getParameterSupport().getParameterValues(name);
+ }
+
+ private ParameterSupport getParameterSupport() {
+ return ParameterSupport.getInstance(getRequest());
+ }
+ };
+
return authenticator.authenticate(request, response);
} catch (MissingRepositoryException mre) {
Modified:
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java?rev=671908&r1=671907&r2=671908&view=diff
==============================================================================
---
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
(original)
+++
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/ParameterSupport.java
Thu Jun 26 07:08:26 2008
@@ -24,6 +24,7 @@
import java.util.List;
import java.util.Map;
+import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.collections.iterators.IteratorEnumeration;
@@ -35,26 +36,45 @@
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import org.apache.sling.api.request.RequestParameter;
import org.apache.sling.api.request.RequestParameterMap;
-import org.apache.sling.engine.impl.request.RequestData;
public class ParameterSupport {
- private RequestData requestData;
+ private static final String ATTR_NAME = ParameterSupport.class.getName();
+
+ /**
+ * The name of the request attribute to set to get the Jetty servlet
+ * container to decode the request query using ISO-8859-1 encoding (value
is
+ * "org.mortbay.jetty.Request.queryEncoding").
+ */
+ private static final String ATTR_JETTY_QUERY_ENCODING =
"org.mortbay.jetty.Request.queryEncoding";
+
+ private final HttpServletRequest servletRequest;
private ParameterMap postParameterMap;
private boolean requestDataUsed;
- public ParameterSupport(RequestData servletRequest) {
- this.requestData = servletRequest;
+ public static ParameterSupport getInstance(ServletRequest servletRequest) {
+ ParameterSupport instance = (ParameterSupport)
servletRequest.getAttribute(ATTR_NAME);
+ if (instance == null) {
+ instance = new ParameterSupport((HttpServletRequest)
servletRequest);
+ servletRequest.setAttribute(ATTR_NAME, instance);
+
+ // SLING-559: Hack to get Jetty into decoding the request
+ // query with ISO-8859-1 as stipulated by the servlet
+ // spec. Other containers ignore this parameter
+ servletRequest.setAttribute(ATTR_JETTY_QUERY_ENCODING,
+ Util.ENCODING_DIRECT);
+ }
+ return instance;
}
- protected RequestData getRequestData() {
- return this.requestData;
+ private ParameterSupport(HttpServletRequest servletRequest) {
+ this.servletRequest = servletRequest;
}
- protected HttpServletRequest getServletRequest() {
- return this.getRequestData().getServletRequest();
+ private HttpServletRequest getServletRequest() {
+ return servletRequest;
}
public boolean requestDataUsed() {
Modified:
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java?rev=671908&r1=671907&r2=671908&view=diff
==============================================================================
---
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
(original)
+++
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/parameters/Util.java
Thu Jun 26 07:08:26 2008
@@ -108,7 +108,7 @@
AbstractRequestParameter param =
(AbstractRequestParameter) params[i];
// fix encoding if different
- if (param.getEncoding() == null) {
+ if (!formEncoding.equals(param.getEncoding())) {
param.setEncoding(formEncoding);
// prepare the parameter for renaming
Modified:
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
URL:
http://svn.apache.org/viewvc/incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java?rev=671908&r1=671907&r2=671908&view=diff
==============================================================================
---
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
(original)
+++
incubator/sling/trunk/engine/src/main/java/org/apache/sling/engine/impl/request/RequestData.java
Thu Jun 26 07:08:26 2008
@@ -608,7 +608,7 @@
public ParameterSupport getParameterSupport() {
if (parameterSupport == null) {
- parameterSupport = new ParameterSupport(this /*
getServletRequest() */);
+ parameterSupport =
ParameterSupport.getInstance(getServletRequest());
}
return parameterSupport;