Java Как сделать недействительным сеанс пользователя, когда он регистрируется дважды с одинаковыми учетными данными - PullRequest
2 голосов
/ 14 сентября 2010

Привет всем. Я нашел эту интересную ветку о том, как сделать недействительным сеанс пользователя, когда он дважды регистрируется.

Как сделать недействительным сеанс пользователя, когда он дважды регистрируется с одинаковыми учетными данными

У меня немного другая среда, но я должен решить ту же проблему. Разница в том, что я не использую JSF, а мое приложение работает в кластере.

Я готов применить этот шаблон, но мне было интересно, где мне сохранить карту пользователя? Есть ли контекст, видимый для всех машин в кластере?

Заранее спасибо

1 Ответ

2 голосов
/ 14 сентября 2010

Вопрос о запуске приложения в кластере более важен и актуален, чем отсутствие JSF.

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

  • Использование базы данных для хранения списка всех зарегистрированных пользователей (с идентификатором для идентификации их сеанса; можно использовать JSESSIONID, но лучше использовать идентификатор, который гарантированно будет уникальным для всех участников кластера). ). Подойдет даже комбинация идентификатора пользователя и идентификатора члена кластера. Это самый простой способ, но он потребует от вас проверить, как ваш код обрабатывает аварийное переключение (вам может потребоваться обновить записи в базе данных при аварийном переключении сеанса).
  • Использовать контекст приложения (ServletContext). Это возможное решение, но не рекомендуется вообще. Хотя контекст приложения должен постоянно обновляться во всех элементах кластера, необходимо регулярно обновлять содержимое (увеличенный сетевой трафик среди участников кластера).
  • Используйте распределенное решение для кэширования, такое как Terracotta или Coherence. Это решение почти такое же, как и предыдущее, за исключением того, что «карта» сеанса не будет управляться в ServletContext. Сетевой трафик обязательно должен возникать при обновлении распределенного кэша.
...