#java #http #struts2 #session-cookies
#java #http #struts2 #сеансовые файлы cookie
Вопрос:
В Интернете и здесь, на SO, есть много информации по этому вопросу, но я нахожу, что многое из этого противоречиво. Итак, я спрашиваю прямо — как в мире я могу добавить атрибут HttpOnly к файлу cookie сеанса JSESSIONID?
Я попытался добавить это в мое веб-приложение web.xml:
<session-config>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
<session-config>
… и я попытался добавить это в свой context.xml файл в conf / Catalina /localhost:
<Context useHttpOnly="true">
И никаких кубиков. Кстати, я добавил вышеупомянутое (useHttpOnly = «true») в приложение Spring MVC на том же Tomcat, и это работает как шарм — когда я проверяю заголовки моего ответа, я вижу:
Set-Cookie:JSESSIONID=57675D7792083CB3B906DAA47A2B5C94; Path=/my-app; HttpOnly
Но с моим приложением Struts 2 этого не происходит. Я читал, что Struts не делает этого «из коробки», что вам нужно, чтобы в каждом ad every action был реализован CookieProvider, реализован метод getCookies (), а затем убедитесь, что эти действия подключены к использованию CookieInterceptor …
… в других сообщениях говорится, что вы должны сделать это вручную в фильтре сервлетов…
… но в то же время в других (более свежих) сообщениях говорится, что вам не нужно ничего делать, что за это отвечает контейнер, и если вы используете Servlet api 3.0 и добавляете вышеуказанные строки в свой context.xml это должно сработать. Тот факт, что он отлично работает с Spring MVC, говорит мне о том, что это может быть правдой.
Кто-нибудь может сказать мне окончательно, нужно ли мне что-то делать программно? Большое спасибо.
Комментарии:
1. Можете ли вы уточнить, что вы сделали программно?
Ответ №1:
В итоге я ничего прагматично не сделал. В этом не было необходимости.
Я все еще немного сомневаюсь, почему именно то, что должно работать только на Tomcat 7 и выше, также работает на Tomcat 6. Но в любом случае, в моих pom я использую 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">
и все, кажется, работает. Сначала казалось, что это не работает, я бы никогда не увидел ‘HttpOnly’ в файле cookie JSESSIONID, используя инструменты разработчика browswer. Но затем я установил BurpSuite для перехвата всего моего http-трафика, и, конечно же, я мог видеть, что атрибут ‘HttpOnly’ был там.