我正在寻找一种方法来配置我的servlet以使用cookie版本0,该版本假设在cookie中不允许等于字符(=),以及其他非URL安全字符。
我有一台服务器使用ServletExec,其中等号字符被自动丢弃(它使用的是cookie版本0?)。我有2个其他服务器使用ServletExec和Tomcat,其中等号字符不被丢弃(显然他们使用的是cookie版本1?)。我不知道他们为什么表现得不同。
所以我只需要帮助找到设置cookie版本的servlet配置,或启用/禁用我的cookie中丢弃等号字符。 TIA!
答案 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 设置,这可能对您的情况有所帮助。