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;


Reply via email to