Spring Security Concurrency на разных браузерах - PullRequest
1 голос
/ 06 января 2010

У меня есть веб-приложение, использующее Spring Webflow и Spring Security. У меня проблема с параллелизмом, и вот сценарий.

Когда я вхожу в систему и перехожу на страницу редактирования, и когда моя учетная запись уже была ограничена для этой операции, я не должен уже выполнять эту операцию. Я вижу, что, поскольку мое ROLE-сохранение в сеансе было загружено во время входа в систему, это, естественно, произойдет. Какова лучшая практика для этого. Должен ли я запросить мою роль и заменить ее в сеансе НА КАЖДУЮ критическую операцию или ограниченную операцию? Разве это не накладные расходы на сервер?

1 Ответ

0 голосов
/ 22 февраля 2011
  • Хранить кэш <user id, timestamp> пользователей, чьи разрешения были недавно изменены. Пусть срок действия записей в кэше истечет вдвое по истечении времени сеанса.
  • Добавить пользовательский фильтр, который распознает существующие сеансы SecurityContext:
    • Если сеанс SecurityContext содержит Principal, чей идентификатор пользователя находится в недавно измененном кэше, а getLastAccessTime() сеанса раньше, чем отметка времени изменения, явно повторно аутентифицируйте пользователя с новыми полномочиями.

Это решение позаботится о сценариях обновления разрешений и понижения.

Вы можете увидеть хороший пример пользователя в org.springframework.security.web.authentication.switchuser.SwitchUserFilter

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