【发布时间】:2011-02-28 20:47:00
【问题描述】:
我正在尝试在 JSESSIONID cookie 上设置 httponly 标志。但是,我正在使用 Java EE 5,无法使用 setHttpOnly()。首先,我尝试使用 response.setHeader() 在 servlet 的 doPost() 中创建自己的 JSESSIONID cookie。
当这不起作用时,我尝试了response.addHeader()。那也没有用。然后,我了解到 servlet 处理将会话转换为 JSESSIONID cookie 并将其插入到 http 标头中,因此如果我想使用该 cookie,我将不得不编写一个过滤器。我写了一个过滤器并在那里玩setHeader()/addHeader(),再次无济于事。
然后,我了解到响应对象在到达过滤器之前会执行一些刷新/关闭操作,因此如果我想操作数据,我需要扩展 HttpServletResponseWrapper 并将其传递给 filterChain.doFilter()。这已经完成,但我仍然没有得到结果。显然我做错了什么,但我不知道是什么。
我不确定这是否与手头的问题有关,但 servlet 没有将 html 文档返回给浏览器。真正发生的只是一些对象被填充并返回到 JSP 文档。我有点假设 Session 对象被转换为 JSESSIONID cookie,并在发送到浏览器之前将其与添加到请求中的对象一起包装在 http 标头中。
我很乐意发布一些代码,但我想首先排除我的困难源于对理论的误解的可能性。
【问题讨论】:
-
添加了一些代码格式,否则它有点难以接近的文字墙。可能仍会考虑发布您尝试过的示例代码。
标签: java servlets cookies httponly jsessionid