【问题标题】:Struts 2 and making JSESSIONID cookie HttpOnly on Tomcat 6, Java 6Struts 2 并在 Tomcat 6、Java 6 上制作 JSESSIONID cookie HttpOnly
【发布时间】:2014-08-24 20:13:22
【问题描述】:

网络上有很多关于这个主题的信息,但我发现其中很多是矛盾的。所以我问的是空白 - 我到底如何才能将 HttpOnly 属性添加到 JSESSIONID 会话 cookie?

我已尝试将此添加到我的 webapp 的 web.xml:

<session-config>
 <cookie-config>
  <http-only>true</http-only>
 </cookie-config>
<session-config>

...我已经尝试将其添加到 conf/Catalina/localhost 中的 context.xml 文件中:

<Context useHttpOnly="true">

而且没有骰子。顺便说一句,我将上述内容(useHttpOnly="true")添加到同一个 Tomcat 上的 Spring MVC 应用程序中,它就像一个魅力——当我检查我的响应头时,我看到:

Set-Cookie:JSESSIONID=57675D7792083CB3B906DAA47A2B5C94; Path=/my-app; HttpOnly

但是对于我的 Struts 2 应用程序,这不会发生。我读过 Struts 并没有开箱即用地做到这一点,你必须让每个广告的每个动作都实现 CookieProvider,实现 getCookies() 方法,然后确保这些动作被连接到使用 CookieInterceptor ...

...其他帖子说您必须在 Servlet 过滤器中手动执行此操作...

...但同时在其他(更新的)帖子中,它说您不必做任何事情,这是容器的责任,如果您使用的是 Servlet api 3.0,并添加以上行到您的 context.xml,它应该可以工作。它与 Spring MVC 配合良好的事实告诉我,这可能是真的。

如果我以编程方式做某事,谁能明确告诉我?非常感谢。

【问题讨论】:

  • 你能澄清一下你以编程方式做了什么吗?

标签: java http struts2 session-cookies


【解决方案1】:

最后我没有做任何务实的事情。这是没有必要的。

我仍然有点不确定为什么只应该在 Tomcat 7 及更高版本上运行的东西也适用于 Tomcat 6。但无论如何,在我的 poms 中,我使用的是 javax.servlet-api 3.1.0(提供,由容器):

<dependency>
 <groupId>javax.servlet</groupId>
 <artifactId>javax.servlet-api</artifactId>
 <version>3.1.0</version>
 <scope>provided</scope>
</dependency>

在我的上下文 xml 文件中,我添加了 'useHttpOnly="true"':

<Context useHttpOnly="true">

似乎一切正常。起初它似乎不起作用,使用浏览器开发工具,我永远不会在 JSESSIONID Cookie 上看到“HttpOnly”。但后来我安装了 BurpSuite 来拦截我所有的 http 流量,果然,我可以看到 'HttpOnly' 属性在那里。

【讨论】:

    猜你喜欢
    • 2012-02-13
    • 2011-02-28
    • 2019-01-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 2010-11-14
    • 2012-10-09
    • 2010-09-07
    相关资源
    最近更新 更多