применение не более одного пользователя в приложении JSP - PullRequest
1 голос
/ 28 ноября 2008

Я разрабатываю веб-инструмент с использованием JSP, в котором много разных пользователей (то есть администраторов, гостей, пользователей с возможностью записи и т. Д.). Поскольку это будет система, основанная на подписке (т. Е. Пользователь платит за подписку на 3/6/12 месяцев), мне нужно обеспечить не более 1 входа в систему на пользователя одновременно. Например, скажем, мистер Джон Смит подписывается на эту систему; Я не хочу, чтобы он передавал свои данные для входа своему другу, чтобы они оба использовали систему с двух разных компьютеров одновременно. Как мне справиться с этой ситуацией?

Ответы [ 3 ]

1 голос
/ 30 января 2009
  1. Когда пользователь входит в систему, сохраните HttpSession.getId() для этого пользователя. Это может быть в области приложения Map от имен пользователей до идентификаторов сеансов или в базе данных.
  2. Для каждого последующего запроса для вошедшего в систему пользователя убедитесь, что request.getSession().getId() - это тот, который сохранен для этого пользователя.
  3. Если идентификатор сеанса запроса не является тем, который сохранен для этого пользователя, тогда он должен быть идентификатором более нового сеанса для последующего входа в систему с тем же именем пользователя. В этом случае сообщите пользователю, что другой вход в систему вступил во владение, и вызовите request.getSession().invalidate(), чтобы выйти из системы.

Главное, что нужно помнить, это то, что с учетом сохраненного идентификатора сеанса для другого сеанса - не текущего сеанса - вы не можете отменить этот другой сеанс.

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

1 голос
/ 01 февраля 2009

Я не знаю, какой, если таковой имеется, фреймворк, который вы используете (вы указали только JSP). Но если остальная часть вашего приложения использует преимущества Spring Framework, эта функция уже реализована в ConcurrentSessionFilter из проекта Spring Security . Он поддерживает несколько способов обнаружения и обработки одновременных входов в систему, в том числе предложенный Питером Хилтоном выше.

0 голосов
/ 28 ноября 2008

Когда пользователь входит в систему, вы захотите сделать недействительным любой другой вход в систему, который он может иметь в данный момент. Это означает, что нужно выполнять проверку каждого сделанного запроса, но вы все равно должны иметь его для базовой проверки. Например, вы можете проверить IP-адрес, с которого они получают доступ, или идентификатор сеанса сервлета и т. Д. Это все хорошие вещи, которые нужно отслеживать в любом случае, особенно для регистрации фактов / отчетов.

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

Используйте вышеупомянутые журналы фактов / отчетов, чтобы проанализировать входы в систему, чтобы увидеть, есть ли какие-либо шаблоны использования, которые не соответствуют типичному одиночному пользователю - например, сеансы часто меняются между двумя или более компьютерами, особенно в сходное время. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...