Я пытаюсь установить флаг httponly на cookie JSESSIONID. Я работаю в Java EE 5, однако, и не могу использовать setHttpOnly()
. Сначала я пытался создать свой собственный cookie JSESSIONID из сервлета doPost()
при помощи response.setHeader()
.
Когда это не работало, я попробовал response.addHeader()
. Это не работало также. Затем я узнал, что сервлет обработал преобразование сессии в cookie JSESSIONID и вставку его в http заголовок поэтому, если я хочу играть с тем cookie, я должен буду записать фильтр. Я записал фильтр и играл с setHeader()
/addHeader()
там, снова напрасно.
Затем я узнал, что существует некоторое действие сброса/завершения, продолжающееся в объекте ответа, прежде чем это доберется до фильтра поэтому, если я хочу управлять данными, я должен расшириться HttpServletResponseWrapper
и передача это к filterChain.doFilter()
. Это сделано, но я все еще не получаю результаты. Очевидно я делаю что-то не так, но я не знаю что.
Я не уверен, относится ли это вообще к вопросу под рукой, но никакой документ HTML не возвращается сервлетом к браузеру. Все это действительно происходит, - то, что некоторые объекты заполняются и возвращаются к документу JSP. У меня есть вид принятых, что объект Сессии превращен в cookie JSESSIONID и перенесен - наряду с объектами, добавленными к запросу - в http заголовке прежде чем быть отправленным в браузер.
Я был бы рад отправить некоторый код, но я хочу исключить возможность, что мои трудности происходят от неверного толкования теории сначала.
Поскольку JSESSIONID
cookie управляется servletcontainer, эта настройка специфична для servletcontainer. Неясно, какой из них вы используете, поэтому вот Apache Tomcat 6.0 целевой ответ, чтобы вы знали, в каком направлении искать свой servletcontainer: вам нужно установить useHttpOnly
атрибут
элемента веб-приложения в true
.
<Context useHttpOnly="true">
...
</Context>
Также смотрите эту документацию по Tomcat об элементе
.