Author: ate
Date: Tue Feb 20 18:47:59 2007
New Revision: 509868

URL: http://svn.apache.org/viewvc?view=rev&rev=509868
Log:
Fix for JS2-605: Query string parameters should not (by default) be provided to 
portlets to be compliant to JSR 168 spec requirements
See: https://issues.apache.org/jira/browse/JS2-605

WARNING: this fix changes the "old" behavior of providing portal parameter to 
all portlets!!!

For "restoring" the old behavior, define the following in jetspeed.properties:
  merge.portal.parameters.with.portlet.parameters=true
  merge.portal.parameters.before.portlet.parameters=true

Modified:
    
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
    portals/jetspeed-2/trunk/src/webapp/WEB-INF/conf/jetspeed.properties

Modified: 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java?view=diff&rev=509868&r1=509867&r2=509868
==============================================================================
--- 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
 (original)
+++ 
portals/jetspeed-2/trunk/components/portal/src/java/org/apache/jetspeed/engine/servlet/ServletRequestImpl.java
 Tue Feb 20 18:47:59 2007
@@ -74,6 +74,9 @@
     
     private boolean included;
 
+    private static Boolean mergePortalParametersWithPortletParameters;
+    private static Boolean mergePortalParametersBeforePortletParameters;
+
     public ServletRequestImpl( HttpServletRequest servletRequest, 
PortletWindow window )
     {
         super(servletRequest);
@@ -90,6 +93,11 @@
             // This happens when an entity is referencing a non-existent 
portlet
             webAppId = window.getId();
         }
+        if (mergePortalParametersWithPortletParameters == null )
+        {
+            mergePortalParametersWithPortletParameters = 
Jetspeed.getContext().getConfiguration().getBoolean("merge.portal.parameters.with.portlet.parameters",
 Boolean.FALSE);
+            mergePortalParametersBeforePortletParameters = 
Jetspeed.getContext().getConfiguration().getBoolean("merge.portal.parameters.before.portlet.parameters",
 Boolean.FALSE);
+        }
     }
 
     protected HttpServletRequest _getHttpServletRequest()
@@ -148,46 +156,57 @@
 
                 }
             }
-
-            String encoding = (String) 
getRequest().getAttribute(PortalReservedParameters.PREFERED_CHARACTERENCODING_ATTRIBUTE);
-            boolean decode = 
getRequest().getAttribute(PortalReservedParameters.PARAMETER_ALREADY_DECODED_ATTRIBUTE)
 == null
-                    && encoding != null;
-            if (decode)
-            {
-                
getRequest().setAttribute(PortalReservedParameters.PARAMETER_ALREADY_DECODED_ATTRIBUTE,
-                        new Boolean(true));
-            }
-
-            //get servlet params
-            for (Enumeration parameters = getRequest().getParameterNames(); 
parameters.hasMoreElements();)
+            
+            if ( mergePortalParametersWithPortletParameters.booleanValue() )
             {
-                String paramName = (String) parameters.nextElement();
-                String[] paramValues = (String[]) 
getRequest().getParameterValues(paramName);
-                String[] values = (String[]) portletParameters.get(paramName);
-
+                String encoding = (String) 
getRequest().getAttribute(PortalReservedParameters.PREFERED_CHARACTERENCODING_ATTRIBUTE);
+                boolean decode = 
getRequest().getAttribute(PortalReservedParameters.PARAMETER_ALREADY_DECODED_ATTRIBUTE)
 == null
+                        && encoding != null;
                 if (decode)
                 {
-                    for (int i = 0; i < paramValues.length; i++)
+                    
getRequest().setAttribute(PortalReservedParameters.PARAMETER_ALREADY_DECODED_ATTRIBUTE,
+                            new Boolean(true));
+                }
+
+                //get servlet params
+                for (Enumeration parameters = 
getRequest().getParameterNames(); parameters.hasMoreElements();)
+                {
+                    String paramName = (String) parameters.nextElement();
+                    String[] paramValues = (String[]) 
getRequest().getParameterValues(paramName);
+                    String[] values = (String[]) 
portletParameters.get(paramName);
+
+                    if (decode)
+                    {
+                        for (int i = 0; i < paramValues.length; i++)
+                        {
+                            try
+                            {
+                                paramValues[i] = new 
String(paramValues[i].getBytes("ISO-8859-1"), encoding);
+                            }
+                            catch (UnsupportedEncodingException e)
+                            {
+                                ;
+                            }
+                        }
+                    }
+
+                    if (values != null)
                     {
-                        try
+                        String[] temp = new String[paramValues.length + 
values.length];
+                        if ( 
this.mergePortalParametersBeforePortletParameters.booleanValue() )
                         {
-                            paramValues[i] = new 
String(paramValues[i].getBytes("ISO-8859-1"), encoding);
+                            System.arraycopy(paramValues, 0, temp, 0, 
paramValues.length);
+                            System.arraycopy(values, 0, temp, 
paramValues.length, values.length);
                         }
-                        catch (UnsupportedEncodingException e)
+                        else
                         {
-                            ;
+                            System.arraycopy(values, 0, temp, 0, 
values.length);
+                            System.arraycopy(paramValues, 0, temp, 
values.length, paramValues.length);
                         }
+                        paramValues = temp;
                     }
+                    portletParameters.put(paramName, paramValues);
                 }
-
-                if (values != null)
-                {
-                    String[] temp = new String[paramValues.length + 
values.length];
-                    System.arraycopy(paramValues, 0, temp, 0, 
paramValues.length);
-                    System.arraycopy(values, 0, temp, paramValues.length, 
values.length);
-                    paramValues = temp;
-                }
-                portletParameters.put(paramName, paramValues);
             }
         }
         return Collections.unmodifiableMap(portletParameters);

Modified: portals/jetspeed-2/trunk/src/webapp/WEB-INF/conf/jetspeed.properties
URL: 
http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/src/webapp/WEB-INF/conf/jetspeed.properties?view=diff&rev=509868&r1=509867&r2=509868
==============================================================================
--- portals/jetspeed-2/trunk/src/webapp/WEB-INF/conf/jetspeed.properties 
(original)
+++ portals/jetspeed-2/trunk/src/webapp/WEB-INF/conf/jetspeed.properties Tue 
Feb 20 18:47:59 2007
@@ -48,6 +48,21 @@
 
#----------------------------------------------------------------------------------
 portalurl.relative.only=false
 
+#----------------------------------------------------------------------------------
+# Until version 2.1, Jetspeed merged portal request parameters with portlet 
specific
+# parameters, effectively allowing "shared" parameters.
+# This is not compliant with the JSR-168 PLT.11, so by default this is now 
disabled.
+#
+# By setting merge.portal.parameters.with.portlet.parameters=true this feature 
can
+# be "restored".
+# In the situation of portal and portlet parameters with the same name, by 
default
+# the portlet parameters will be provided first in the values array, but this 
too
+# can be overridden by setting 
merge.portal.parameters.before.portlet.parameters=true
+#
+# Setting both these properties to true will deliver the "old" pre-2.1 
behavior.
+#----------------------------------------------------------------------------------
+merge.portal.parameters.with.portlet.parameters=false
+merge.portal.parameters.before.portlet.parameters=false
 # -------------------------------------------------------------------
 #  Portlet Mode Support
 # -------------------------------------------------------------------



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to