2010-05-14 3 views
5

Возможно ли переопределить встроенный генератор Tomcat JSESSIONID, чтобы иметь возможность создавать пользовательские значения этого файла cookie на основе логина пользователя?Как создать пользовательский JSESSIONID на основе некоторого хэша данных пользователя для репликации сеанса

Зачем мне это нужно: у меня есть балансировщик нагрузки с «липкими сеансами», настроенный для маршрутизации запросов с тем же JSESSIONID на тот же сервер, и я хочу предотвратить ситуацию, когда тот же пользователь может запускать два разных сеанса на разные серверы.

PS: все это о Amazon EC2

+0

Мне было бы интересно узнать, что влияет на ваше приложение, если пользователю удастся запустить два разных сеанса на разных машинах, Vs. две разные сессии на одной машине –

+0

Это хороший вопрос. 2 сеанса на двух машинах для разных пользователей лучше для общей производительности системы, чем 2 сеанса на 1 машине, но для одного и того же пользователя лучше иметь оба сеанса на одном компьютере, потому что они будут иметь общие данные. –

+0

Я не эксперт по безопасности, но разве это не открытые отверстия для атак CSRF/Session hijack? Т.е. все, что мне нужно, это ваше генерируемое значение cookie JSESSION для выдачи себя за пользователя. –

ответ

3

Существует лучший способ сделать это: See the tomcat manual on session replication in cluster

+0

Этот механизм использует многоадресную рассылку IP, что невозможно, как я знаю, в Amazon EC2, где мое приложение в настоящее время работает. Есть также хорошие примеры приложений для кластеризации, но все они нуждаются в серверах, чтобы знать друг друга, что не так хорошо. Я бы хотел, чтобы LB был единственной частью системы, кто знает экземпляры tomcat. –

+1

ну, может быть, вам следовало сказать, что речь идет о EC2? – Bozho

+0

Да, это моя ошибка –

1

Вы можете сделать это, определив свой индивидуальный менеджер сеансов,

http://tomcat.apache.org/tomcat-5.5-doc/config/manager.html

Однако, вероятно, это не работает для вашего прецедента. Вы не знаете имя пользователя перед входом пользователя, но сеанс должен быть создан для входа.

Я думаю, что нажатие сессии на бэкэнд - лучший подход. Вы можете использовать диспетчер сеансов JDBCStore, распространяемый вместе с Tomcat. Вы также можете найти реализацию для memecached.

Если целью нескольких серверов является избыточность, вы также можете использовать кластеризацию, но это не поможет вам, если ваша цель - масштабировать для загрузки.

+0

Я решил это, переключившись с идентификатора сеанса на свой собственный сгенерированный cookie USERID, который на самом деле является хешем от имени пользователя. Я также блуждаю, что, если это будет какой-то СЕРВЕРНЫЙ? –

 Смежные вопросы

  • Нет связанных вопросов^_^