网上有大量的信息,关于这个主题的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一起运行的事实告诉我,这可能是真的。
如果我以编程方式做某事,有人能告诉我吗?非常感谢。
答案 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'属性就在那里。