繁体   English   中英

在Tomcat 6,Java 6上实现Struts 2并制作JSESSIONID cookie HttpOnly

[英]Struts 2 and making JSESSIONID cookie HttpOnly on Tomcat 6, Java 6

Web上以及此处的有关此主题的信息很多,但我发现其中很多矛盾。 所以,我想问点空白-到底如何在JSESSIONID会话Cookie中添加HttpOnly属性?

我尝试将其添加到我的Web应用程序的web.xml中:

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

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

<Context useHttpOnly="true">

而且没有骰子。 顺便说一句,我在同一个Tomcat上的Spring MVC应用程序中添加了上述内容(useHttpOnly =“ true”),它的工作原理就像一个魅力-当我检查响应标头时,我看到:

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

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

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

...但是与此同时,在其他(较新的)文章中,则表示您无需执行任何操作,这是容器的责任,如果您使用的是Servlet api 3.0,则将以上几行添加到您的上下文中.xml,它应该可以工作。 它在Spring MVC上可以正常工作的事实告诉我,这可能是正确的。

谁能明确地告诉我我是否以编程方式做某事? 非常感谢。

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

我仍然有些疑惑,为什么仅在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”属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM