如何设置java servlets使用的cookie版本(0或1)?

时间:2014-08-24 14:15:36

标签: tomcat servlets cookies

我正在寻找一种方法来配置我的servlet以使用cookie版本0,该版本假设在cookie中不允许等于字符(=),以及其他非URL安全字符。

我有一台服务器使用ServletExec,其中等号字符被自动丢弃(它使用的是cookie版本0?)。我有2个其他服务器使用ServletExec和Tomcat,其中等号字符不被丢弃(显然他们使用的是cookie版本1?)。我不知道他们为什么表现得不同。

所以我只需要帮助找到设置cookie版本的servlet配置,或启用/禁用我的cookie中丢弃等号字符。 TIA!

1 个答案:

答案 0 :(得分:5)

我想说它与Tomcat配置有关,而不是与servlet配置有关。

默认情况下,Tomcat会尝试解析您的cookie值,并根据该值尝试'猜测'cookie版本。更详细地说,如果它找到某些特定于版本1的字符,它将自动将cookie版本设置为1。 即即使在您的servlet中将cookie值设置为0,Tomcat也会在响应呈现期间将其覆盖为1。

为避免此类行为,您可以设置
org.apache.tomcat.util.http.CookieSupport.ALLOW_HTTP_SEPARATORS_IN_V0 属性 true

Tomcat从系统属性中获取此属性,即可以使用设置系统属性,更新catalina.properties或任何其他合适的方式将此属性值设置为true。

有关详细信息,请参阅 appendCookieValue 方法 的 org.apache.tomcat.util.http.ServerCookie

PS CookieSupport 类中还有 ALLOW_EQUALS_IN_VALUE 设置,这可能对您的情况有所帮助。