Author: markt
Date: Thu Feb  7 12:36:12 2019
New Revision: 1853124

URL: http://svn.apache.org/viewvc?rev=1853124&view=rev
Log:
Refactor how cookies are transferred from the base request to a PushBuilder so 
that they are accessible, and may be edited, via the standard PushBuilder 
methods for working with HTTP headers.
The inability to manipulate cookies was highlighted by a failing Servlet 4 TCK 
test

Modified:
    tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java
    tomcat/trunk/webapps/docs/changelog.xml

Modified: tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java?rev=1853124&r1=1853123&r2=1853124&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/core/ApplicationPushBuilder.java Thu 
Feb  7 12:36:12 2019
@@ -39,6 +39,7 @@ import org.apache.catalina.connector.Req
 import org.apache.catalina.util.SessionConfig;
 import org.apache.coyote.ActionCode;
 import org.apache.tomcat.util.buf.HexUtils;
+import org.apache.tomcat.util.buf.MessageBytes;
 import org.apache.tomcat.util.collections.CaseInsensitiveKeyMap;
 import org.apache.tomcat.util.http.CookieProcessor;
 import org.apache.tomcat.util.http.parser.HttpParser;
@@ -158,6 +159,10 @@ public class ApplicationPushBuilder impl
                 cookies.add(new Cookie(responseCookie.getName(), 
responseCookie.getValue()));
             }
         }
+        List<String> cookieValues = new ArrayList<>(1);
+        cookieValues.add(generateCookieHeader(cookies,
+                catalinaRequest.getContext().getCookieProcessor()));
+        headers.put("cookie", cookieValues);
 
         // Authentication
         if (catalinaRequest.getPrincipal() != null) {
@@ -339,7 +344,14 @@ public class ApplicationPushBuilder impl
                 pushTarget.addPathParameter(sessionPathParameterName, 
sessionId);
             }
             if (addSessionCookie) {
-                cookies.add(new Cookie(sessionCookieName, sessionId));
+                String sessionCookieHeader = sessionCookieName + "=" + 
sessionId;
+                MessageBytes mb = 
pushTarget.getMimeHeaders().getValue("cookie");
+                if (mb == null) {
+                    mb = pushTarget.getMimeHeaders().addValue("cookie");
+                    mb.setString(sessionCookieHeader);
+                } else {
+                    mb.setString(mb.getString() + ";" + sessionCookieHeader);
+                }
             }
         }
 
@@ -357,11 +369,6 @@ public class ApplicationPushBuilder impl
             pushTarget.queryString().setString(pushQueryString + "&" 
+queryString);
         }
 
-        // Cookies
-        pushTarget.getMimeHeaders().addValue("cookie")
-            .setString(generateCookieHeader(cookies,
-                catalinaRequest.getContext().getCookieProcessor()));
-
         // Authorization
         if (userName != null) {
             pushTarget.getRemoteUser().setString(userName);

Modified: tomcat/trunk/webapps/docs/changelog.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1853124&r1=1853123&r2=1853124&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Thu Feb  7 12:36:12 2019
@@ -45,6 +45,16 @@
   issues do not "pop up" wrt. others).
 -->
 <section name="Tomcat 9.0.17 (markt)" rtext="in development">
+  <subsection name="Catalina">
+    <changelog>
+      <fix>
+        Refactor how cookies are transferred from the base request to a
+        <code>PushBuilder</code> so that they are accessible, and may be 
edited,
+        via the standard <code>PushBuilder</code> methods for working with HTTP
+        headers. (markt)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="WebSocket">
     <changelog>
       <scode>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to