Как вы ограничиваете пользователя для входа в систему из нескольких браузеров / вкладок в Spring Security? - PullRequest
0 голосов
/ 27 ноября 2018

Я недавно пошел на собеседование, и они задали мне этот вопрос.Я не был готов к этому, я просто купил базу данных, потому что это то, что я делаю, когда не могу найти решение, хотя я знал, что это плохое программирование.Я сказал им сделать дополнительный столбец как «статус» в таблице пользователя, чтобы пользователь входил в систему из одного браузера, статус должен быть изменен, и если он снова пытается войти в систему из другого браузера, мы должны проверить, что пользователь уже вошел в систему или нетИзбегайте многократного входа в систему из другого браузера.Он не казался впечатленным (я тоже не ожидал).Он спросил меня, как это сделать с помощью весенней безопасности?Я на самом деле понятия не имею.Может кто-нибудь, пожалуйста, дайте мне ответ и оптимизированное решение с примером.Пожалуйста, мне это нужно.

1 Ответ

0 голосов
/ 27 ноября 2018

Решение поддерживается из коробки с использованием пружинной защиты.

Из документации Spring :

Управление одновременным сеансом

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

<listener>
  <listener-class>
    org.springframework.security.web.session.HttpSessionEventPublisher
  </listener-class>
</listener>

Затем добавьте следующие строки в контекст приложения:

<http>
  ...
  <session-management>
      <concurrency-control max-sessions="1" />
  </session-management>
</http>

Это не позволит пользователю войти в систему несколько раз - второй вход приведет к тому, что первый будет признан недействительным.Часто вы предпочитаете запретить второй вход в систему, в этом случае вы можете использовать

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

Второй вход в систему будет отклонен.«Отклонено» означает, что пользователь будет отправлен на URL-адрес аутентификации-отказа, если используется вход на основе формы.Если вторая аутентификация происходит с помощью другого неинтерактивного механизма, такого как «запомнить меня», клиенту будет отправлена ​​«неавторизованная» (402) ошибка.Если вместо этого вы хотите использовать страницу с ошибкой, вы можете добавить атрибут session-authentication-error-url к элементу управления сеансом.

Если вы используете настроенный фильтр аутентификации для входа в систему на основе форм, тогдаВы должны явно настроить поддержку одновременного управления сеансом.Более подробную информацию можно найти в главе «Управление сессиями».

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