java - 在 JSESSIONID cookie 中设置 httponly (Java EE 5)

标签 java servlets cookies httponly jsessionid

我正在尝试在 JSESSIONID cookie 上设置 httponly 标志。但是,我在 Java EE 5 中工作,无法使用 setHttpOnly()。首先,我尝试使用 response.setHeader() 在 servlet 的 doPost() 中创建我自己的 JSESSIONID cookie。

当这不起作用时,我尝试了 response.addHeader()。那也没用。然后,我了解到 servlet 处理将 session 转换为 JSESSIONID cookie 并将其插入到 http header 中,因此如果我想使用该 cookie,我将不得不编写一个过滤器。我写了一个过滤器并在那里玩了 setHeader()/addHeader() ,再次无济于事。

然后,我了解到响应对象在到达过滤器之前会执行一些刷新/关闭操作,因此如果我想操作数据,我需要扩展 HttpServletResponseWrapper 并传递它到 filterChain.doFilter()。这已经完成,但我仍然没有得到结果。显然我做错了什么,但我不知道是什么。

我不确定这是否与手头的问题完全相关,但是 servlet 没有将 html 文档返回给浏览器。真正发生的是一些对象被填充并返回到 JSP 文档。我假设 Session 对象被转换为 JSESSIONID cookie,并在发送到浏览器之前将其与添加到请求中的对象一起包装在 http header 中。

我很乐意发布一些代码,但我想首先排除我的困难源于对理论的误解的可能性。

最佳答案

JSESSIONID cookie 由 servletcontainer 管理,此设置是特定于 servletcontainer 的。不清楚您使用的是哪一个,所以这是一个 Apache Tomcat 6.0有针对性的答案,以便您知道必须在哪个方向寻找您的 servletcontainer:您需要设置 useHttpOnly Web 应用程序的属性 <Context>元素到 true .

<Context useHttpOnly="true">
    ...
</Context>

另见 Tomcat documentation关于 <Context>元素。

关于java - 在 JSESSIONID cookie 中设置 httponly (Java EE 5),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2992473/

相关文章:

java - 用 Java 绘制图像,在上网本上慢得要命

java - Jetty:默认的 servlet 上下文路径

java - JSON.stringify(array) 从 jsp 到 servlet(仅使用 javax.json-api1.0.jar 或 javax.json-1.0.jar 循环)

java - 尽管位置具有正确的 url,但未发生重定向

c# - 无法从 'localStorage' 读取 'Window' 属性

java - 在 Eclipse 中使用处理库

java - org.hibernate.tutorial.annotations.Event 类未找到导致的错误

java - 在没有 Internet 连接时加载本地 JsonData

angular - NGX Cookie 服务不返回任何内容

javascript - 用于保存总数的变量