Блокировка вошел в систему пользователя в Oracle с помощью Java - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть одно веб-приложение java в jsp и servlet и db as oracle 10g EE.При входе в систему, если в систему вошел один пользователь, как я могу запретить повторной регистрации того же пользователя, если только он не вышел?

Примечание: Я не говорю, что если вошедший в систему пользователь нажмет на страницу входа, то он сразу же будет перенаправлен на свою домашнюю страницу.

Я спрашиваю, как я могу предотвратить повторный вход вошедшего в систему пользователя, если он уже вошел в систему. Предположим, пользователь A уже вошел в базу данных (выход не выполнен), затем пользователь B пытается войти в базу данных.с идентификатором пользователя и паролем пользователя A, тогда просто пользователь B будет заблокирован для входа в систему.Как мне это реализовать?

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012

Пусть база данных выполняет свою работу!

(Это решение предполагает, что вы можете получить помощь от администраторов баз данных или у вас есть доступ SYSDBA к базе данных.)

Сначала создайте профиль, которыйразрешает только 1 сеанс для пользователя:

CREATE PROFILE single_session_profile
       LIMIT SESSIONS_PER_USER 1;

Затем создайте пользователя с нужным профилем или измените существующего пользователя для использования профиля:

CREATE USER user_a
       IDENTIFIED BY user_id
       DEFAULT TABLESPACE users
       TEMPORARY TABLESPACE temp
       QUOTA UNLIMITED ON users
       PROFILE single_session_profile;

или

ALTER  USER user_a
       PROFILE single_session_profile;

Наконец, для базы данных должны соблюдаться следующие ограничения:

ALTER  SYSTEM SET RESOURCE_LIMIT = TRUE SCOPE = MEMORY;

(SCOPE = MEMORY включает принудительное применение ограничения для текущего запущенного экземпляра базы данных; если вы хотите сделать его постоянным, то есть включенным после базы данныхпри перезапуске необходимо использовать SCOPE = BOTH, где BOTH означает оба MEMORY и SPFILE, то есть файл инициализации БД. Если база данных использует не новый формат SPFILE, а старый PFILE (init.ora), тогда вам нужно добавить параметр RESOURCE_LIMIT в init.ora и перезапустить базу данных.)

Вот и все.Если user_a попытается войти в систему дважды, он получит:

ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
2 голосов
/ 24 февраля 2012

Вам нужно управлять картой вошедших в систему пользователей, Map<String, String> userToSessionIdMap, когда пользователь входит в систему, вы проверяете, существует ли какой-либо сеанс для этого имени пользователя, если да, запретить, разрешить вход,

Теперь при выходе из системы вынеобходимо удалить запись с карты, также вам нужно реализовать HttpSessionBindingListener, поэтому, когда сеанс истекает, он снова удаляет запись

Также см.

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