Author: markt
Date: Wed Oct 1 10:18:19 2014
New Revision: 1628670
URL: http://svn.apache.org/r1628670
Log:
Add Cookie generation to the CookieProcessor interface
Re-plumb the current Cookie generation to use the new interface
Provide an initial (and very incomplete) RFC6265 cookie generation
implementation
Modified:
tomcat/trunk/java/org/apache/catalina/connector/Response.java
tomcat/trunk/java/org/apache/tomcat/util/http/CookieProcessor.java
tomcat/trunk/java/org/apache/tomcat/util/http/LegacyCookieProcessor.java
tomcat/trunk/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
Modified: tomcat/trunk/java/org/apache/catalina/connector/Response.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Response.java?rev=1628670&r1=1628669&r2=1628670&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Response.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Response.java Wed Oct 1
10:18:19 2014
@@ -51,7 +51,6 @@ import org.apache.tomcat.util.buf.CharCh
import org.apache.tomcat.util.buf.UEncoder;
import org.apache.tomcat.util.http.FastHttpDateFormat;
import org.apache.tomcat.util.http.MimeHeaders;
-import org.apache.tomcat.util.http.SetCookieSupport;
import org.apache.tomcat.util.http.parser.MediaTypeCache;
import org.apache.tomcat.util.net.URL;
import org.apache.tomcat.util.res.StringManager;
@@ -945,17 +944,17 @@ public class Response
}
public String generateCookieString(final Cookie cookie) {
- //web application code can receive a IllegalArgumentException
- //from the appendCookieValue invocation
+ // Web application code can receive a IllegalArgumentException
+ // from the generateHeader() invocation
if (SecurityUtil.isPackageProtectionEnabled()) {
return AccessController.doPrivileged(new
PrivilegedAction<String>() {
@Override
public String run(){
- return SetCookieSupport.generateHeader(cookie);
+ return
getContext().getCookieProcessor().generateHeader(cookie);
}
});
} else {
- return SetCookieSupport.generateHeader(cookie);
+ return getContext().getCookieProcessor().generateHeader(cookie);
}
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/http/CookieProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/CookieProcessor.java?rev=1628670&r1=1628669&r2=1628670&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/CookieProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/CookieProcessor.java Wed Oct
1 10:18:19 2014
@@ -18,6 +18,8 @@ package org.apache.tomcat.util.http;
import java.nio.charset.Charset;
+import javax.servlet.http.Cookie;
+
public interface CookieProcessor {
/**
@@ -26,8 +28,13 @@ public interface CookieProcessor {
void parseCookieHeader(MimeHeaders headers, ServerCookies serverCookies);
/**
- * The character set that is to be used to turn the bytes provided in the
- * cookie header into characters for the cookie value.
+ * Generate the HTTP header value for the given Cookie.
+ */
+ String generateHeader(Cookie cookie);
+
+ /**
+ * The character set that will be used when converting between bytes and
+ * characters when parsing and/or generating HTTP headers for cookies.
*/
Charset getCharset();
}
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/LegacyCookieProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/LegacyCookieProcessor.java?rev=1628670&r1=1628669&r2=1628670&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/LegacyCookieProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/LegacyCookieProcessor.java
Wed Oct 1 10:18:19 2014
@@ -185,6 +185,12 @@ public final class LegacyCookieProcessor
}
+ @Override
+ public String generateHeader(javax.servlet.http.Cookie cookie) {
+ return SetCookieSupport.generateHeader(cookie);
+ }
+
+
/**
* Parses a cookie header after the initial "Cookie:"
* [WS][$]token[WS]=[WS](token|QV)[;|,]
Modified:
tomcat/trunk/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java?rev=1628670&r1=1628669&r2=1628670&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/http/Rfc6265CookieProcessor.java
Wed Oct 1 10:18:19 2014
@@ -68,4 +68,25 @@ public class Rfc6265CookieProcessor impl
pos = headers.findHeader("Cookie", ++pos);
}
}
+
+
+ @Override
+ public String generateHeader(javax.servlet.http.Cookie cookie) {
+
+ StringBuilder header = new StringBuilder();
+ // TODO: Name validation takes place in Cookie and can not be
configured
+ // per Context. Moving it to here would allow per Context config
+ // but delay validation until the header is generated. However,
+ // the spec requires an IllegalArgumentException on Cookie
+ // generation.
+ header.append(cookie.getName());
+ header.append('=');
+ // TODO: Value also needs validation that varies depending on the spec
+ // being used. This is currently delayed until the header is
+ // generated.
+ header.append(cookie.getValue());
+
+ // TODO add support for the attributes.
+ return header.toString();
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]