httpOnly Session Cookie + Servlet 3.0 (例如 Glassfish v3)

默认情况下,Glassfish v3 不会在会话 Cookie 上设置 httpOnly 标志(像往常一样使用 ) 创建时。request.getSession()

我知道,有一种方法,但我不确定,如果这是最好的方法,如果是的话,最好的地方是把那条线放在哪里。javax.servlet.SessionCookieConfig.setHttpOnly()

顺便说一句,它当然不能在 servlet 本身中完成(例如 init()):

java.lang.IllegalStateException: PWC1426: 
Unable to configure httpOnly session tracking cookie property for 
servlet context /..., because this servlet context has already been initialized

通常,我更喜欢使用配置选项,例如在web.xml。


答案 1

这是通过 Servlet 3.0 支持的(请参见 web-common_3_0.xsd):web.xml

<web-app>
  <session-config>
    <cookie-config>
      <!--             
        Specifies whether any session tracking cookies created 
        by this web application will be marked as HttpOnly
      -->
      <http-only>true</http-only>
    </cookie-config>
  </session-config>
</web-app>

答案 2

您还可以添加以提高安全性。<secure>true</secure>

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

推荐