Как уведомить пользователя о другом сеансе с помощью Spring Security?

У меня есть проектное/системное требование, чтобы уведомить пользователя User-A о том, что до входа в систему User-A был еще один активный сеанс (от User-B). Как это сделать с помощью Spring Security?

Сценарий таков:

  1. Джон Доу входит в систему, используя имя пользователя johndoe.
  2. Джейн входит в систему с помощью johndoe
  3. Система должна отобразить уведомление (содержащее IP-адрес другого пользователя) для обоих пользователей о том, что был создан другой сеанс с использованием его или ее имени пользователя.

Пример:

После того, как Джейн войдет в систему Step-2, Джон Доу, отправив новый запрос (например, щелкнув ссылку), получит ff. уведомление:

You have been automatically logged-out of the system.
Your login credential was used with IP Address (x.x.x.x).
If you believe your account was compromised, please report...

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

Your login credential was used with IP Address (x.x.x.x).
If you believe your account was compromised, please report...

Я попытался изучить настраиваемые фильтры управления сеансами, настраиваемые фильтры одновременных сеансов и настраиваемую стратегию управления одновременным доступом, но я не могу понять эту тему. Кажется, я не могу определить w/c элемент, который я должен настроить.

Я также прочитал управление сеансами глава документации Spring Security, но я застрял в том, как реализовать вышеуказанное требование.


person Jonathan    schedule 07.08.2013    source источник


Ответы (1)


Если я получу ваш вопрос, вам нужно, чтобы только один пользователь одновременно входил в систему с учетными данными xyz, и если другой пользователь (A) пытается войти в систему, когда один пользователь (B) уже вошел в систему, вы не хотите, чтобы другой пользователь A, чтобы войти в систему и сообщить, что кто-то вошел в систему с такими же учетными данными.

вы можете добиться этого max-sessions="1"

<security:http auto-config="true" use-expressions="true" access-denied-page="/accessDenied.jsp">

    <security:form-login login-page="/index.jsp"
        default-target-url="/jsp/home.jsp"
        authentication-failure-handler-ref="authenticationFailureHandler"/>


    <security:session-management>
        <security:concurrency-control max-sessions="1" error-if-maximum-exceeded="true"/>
    </security:session-management>

</security:http> 

Где-то я запутался в понимании вашей реальной потребности. Если вам нужно, чтобы оба сеанса оставались активными, увеличьте max-sessions = "max_session_you_need" и просто зарегистрируйте прослушиватель создания сеанса, и там вы можете проверить активные сеансы с только что пришедшим запросом сеанса, если он совпадает с одним из активных сеансов, тогда какой-то пользователь уже вошел в систему и делает все, что вы хотите...

person Jayesh    schedule 07.08.2013
comment
Привет Джаеш, спасибо за ответ. Что мне действительно нужно, так это сообщить пользователям IP-адреса, которые используют одно и то же имя пользователя. Самый последний сеанс будет действительным, но самый последний будет аннулирован. Оба пользователя должны быть уведомлены об IP-адресе другого пользователя. - person Jonathan; 07.08.2013
comment
Можно ли этого добиться с помощью пользовательской стратегии параллельного управления или пользовательского HttpSessionEventPublisher? - person Jonathan; 07.08.2013
comment
Я понял вашу точку зрения, думаю, перейдите по этой ссылке, forum.springsource.org/, который помогает вам реализовать прослушиватель, теперь в функции sessionCreated вы можете проверить все активные сеансы с только что полученным запросом сеанса, затем вы просто транслируете одно сообщение обоим пользователям с IP-адресом этот пользователь xyz с IP-адресом XYZ уже вошел в систему. На стороне клиента просто прочитайте один объект сеанса, который имеет это сообщение. также вы можете транслировать как IP-адрес, так и на стороне клиента читать текущий IP-адрес и отображать только один несоответствующий. - person Jayesh; 07.08.2013
comment
Спасибо за направление Jayesh. Буду держать вас в курсе и приму ваш ответ, как только он заработает. :) - person Jonathan; 07.08.2013
comment
Добро пожаловать, сэр.. Спасибо. - person Jayesh; 07.08.2013