Struts 2 и создание JSESSIONID cookie HttpOnly на Tomcat 6, Java 6

#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’ был там.