как сохранить сеанс в смешанной среде Apache и Tomcat

У меня есть Apache для обслуживания статического контента и Tomcat для динамического контента, связанного с mod_jk. Мое приложение основано на Spring и использует Spring Security. Страницы Apache — это порт 80, страницы Tomcat — через порт 8080. Я обнаружил, что Spring Security правильно вызывает вход в систему, и создается файл cookie JSESSIONID. Этот файл cookie JSESSIONID сохраняется, пока я продолжаю переходить на динамические страницы; то есть на страницы, которые обслуживает Tomcat. Когда я перехожу на статическую страницу, файл cookie JSESSIONID исчезает. Предположительно это означает, что сеанс Tomcat завершился. Это означает, что когда я впоследствии возвращаюсь на динамическую страницу, Spring Security требует повторного входа в систему. Как я могу сохранить Spring Security в смешанной статической и динамической среде такого рода? Есть ли способ сохранить файл cookie JSESSIONID, когда я возвращаюсь на страницу, обслуживаемую Apache.

JSESSIONID создается при первом доступе к динамическим страницам (когда я выполняю вход через spring-security). JSESSIONID остается неизменным, пока я перемещаюсь по любым динамическим страницам (то есть по страницам, которые обслуживает Tomcat). Когда я перехожу на статическую страницу, файл cookie JSESSIONID исчезает (это не вопрос изменения его значения - файл cookie JSESSIONID отсутствует). Свойства работника:

worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
worker.ajp13_worker.lbfactor=50
worker.ajp13_worker.cachesize=10
worker.ajp13_worker.cache_timeout=600
worker.ajp13_worker.socket_keepalive=1
worker.ajp13_worker.socket_timeout=300

Директивы конфигурации:

JkMount /OLOSmember/ ajp13_worker
JkMount /OLOSmember/* ajp13_worker

Браузер Хром. Apache и Tomcat7 находятся в Ubuntu.


person Theseus    schedule 15.12.2012    source источник


Ответы (1)


В вашем вопросе недостаточно информации для однозначного ответа. Вот некоторые вещи, которые вы можете сделать, чтобы устранить неполадки.

  • Используйте firebug, чтобы узнать, отправляется ли jsessionid при переходе на динамические страницы из статических страниц. Показывает ли firebug изменение значения идентификатора JSESSION, вы хотите изолировать слой, в котором находится проблема, делает ли идентификатор jsession его для apache, но не передает tomcat или нет?

  • покажите свои директивы конфигурации mod_jk и файлы worker.properties для tomcat, чтобы мы могли лучше вам помочь.

person ams    schedule 15.12.2012
comment
JSESSIONID создается при первом доступе к динамическим страницам (когда я выполняю вход через spring-security). JSESSIONID остается неизменным, пока я перемещаюсь по любым динамическим страницам (то есть по страницам, которые обслуживает Tomcat). Когда я перехожу на статическую страницу, файл cookie JSESSIONID исчезает (это не вопрос изменения его значения - файл cookie JSESSIONID отсутствует). Свойства работника: - person Theseus; 15.12.2012
comment
Это была моя ошибка. На самом деле код работает. JSESSIONID сохраняется, и безопасность работает правильно. Я был введен в заблуждение, потому что Chrome Inspect показывает, что файл cookie исчезает, когда вы возвращаетесь к статическому содержимому. На самом деле он не исчезает — Chrome просто перестает его показывать, потому что он не связан с отображаемой статической страницей. Он также отлично работает, если вы используете mod_proxy, а не mod_jk. - person Theseus; 15.12.2012