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

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

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

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

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

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


person Massimo Ugues    schedule 14.09.2010    source источник


Ответы (1)


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

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

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