Tomcat 5.5.36上的HttpOnly cookies

时间:2012-10-24 19:37:42

标签: java tomcat cookies tomcat5.5 httponly

我在帖子How do you configure HttpOnly cookies in tomcat / java webapps?上看到Tomcat 5.5。(&gt; 28)应支持useHttpOnly元素中指定的供应商特定<Context>属性。

我将此属性添加到我的server.xml中配置的所有上下文。

但是,只有JSESSIONID附加了"; httpOnly"标记。所有其他Cookie与我添加useHttpOnly="true"之前的完全一样。

Set-Cookie=
JSESSIONID=25E8F...; Path=/custompath; HttpOnly
mycustomcookie1=xxxxxxx; Path=/
mycustomcookie2=1351101062602; Path=/
mycustomcookie3=0; Path=/
mycustomcookie4=1; Path=/; Secure
mycustomcookie5=4000; Expires=Sat, 22-Oct-2022 17:51:02 GMT; Path=/

还有什么我需要改变吗?

(升级到tomcat 6或7现在不是一个选项。我们的系统使用基于tomcat 5.5的第三方框架)

1 个答案:

答案 0 :(得分:1)

服务器中的useHttpOnly配置确实仅适用于服务器控制的Cookie,例如JSESSIONID

对于webapp控制的cookie,您需要自己手动创建整个cookie标头。 Cookie类不适合,因为在Servlet 3.0中引入了setHttpOnly()方法,但是你使用Tomcat 5.5作为Servlet 2.4容器在Cookie类中没有这个方法。您需要升级到至少Tomcat 7,这是一个与Servlet 3.0兼容的容器。

您可以在问题中手动创建cookie,如下所示:

response.addHeader("Set-Cookie", "mycustomcookie1=xxxxxxx; Path=/; HttpOnly");
response.addHeader("Set-Cookie", "mycustomcookie2=1351101062602; Path=/; HttpOnly");
response.addHeader("Set-Cookie", "mycustomcookie3=0; Path=/; HttpOnly");
response.addHeader("Set-Cookie", "mycustomcookie4=1; Path=/; Secure; HttpOnly");
response.addHeader("Set-Cookie", "mycustomcookie5=4000; Expires=Sat, 22-Oct-2022 17:51:02 GMT; Path=/; HttpOnly");

确实只需将HttpOnly属性添加到Cookie标头值,由;分隔。

如果您希望在所有 Cookie上透明地应用此功能,那么您可能希望提供其中addHeader()setHeader()方法的自定义HttpServletResponseWrapper因此被覆盖以检查是否已设置Set-Cookie标头,如果已设置,则在缺席时将;HttpOnly添加到该值。这样您就可以继续使用addCookie()