HttpOnly Session Cookie + Servlet 3.0 (например, Glassfish v3)
По умолчанию Glassfish v3 не устанавливает флаг httpOnly в cookie сеанса (при создании, как обычно, с помощью request.getSession()
).
Я знаю, существует метод javax.servlet.SessionCookieConfig.setHttpOnly()
, но я не уверен, если это лучший способ сделать это, и если да, то где лучше всего разместить эту строку.
BTW, конечно, это невозможно сделать в самом сервлете (например, в 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
Это поддерживается с помощью сервлета 3.0 web.xml
(см. web-common_3_0.xsd
):
<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>