Struts 2并在Tomcat 6,Java 6上创建JSESSIONID cookie HttpOnly

时间:2014-07-03 15:47:32

标签: java http struts2 session-cookies

网上有大量的信息,关于这个主题的SO,但我发现其中很多都是矛盾的。所以我要问一点空白 - 我可以在世界上如何将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 =&#34; true&#34;)添加到同一个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一起运行的事实告诉我,这可能是真的。

如果我以编程方式做某事,有人能告诉我吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

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

我仍然有点不确定为什么只能在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上使用browswer开发工具看到'HttpOnly'。但后来我安装了BurpSuite来拦截我所有的http流量,果然,我可以看到'HttpOnly'属性就在那里。