1

我在线程上看到了How do you configure HttpOnly cookies in tomcat / java webapps? Tomcat 5.5.(>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 的第三方框架)

4

1 回答 1

1

服务器中的useHttpOnly配置确实适用于服务器控制的 cookie,例如JSESSIONIDonly。

对于 webapp 控制的 cookie,您必须自己手动创建整个 cookie 标头。该类Cookie不适合,因为该setHttpOnly()方法是在 Servlet 3.0 中引入的,但是您使用的是 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 上透明地应用它,那么您可能希望提供一个自定义HttpServletResponseWrapper,其中相应地覆盖addHeader()setHeader()方法以检查是否Set-Cookie设置了标头,如果设置了,则在不存在时添加;HttpOnly到该值。这样您就可以继续使用addCookie().

于 2012-10-24T19:42:52.123 回答