Я не нашел отличное решение, но я нашел решение. Хотя этот вопрос, вероятно, слишком старый, чтобы помочь оригинальному плакату, он может помочь другим людям с тем же вопросом.
У меня уже был пользовательский фильтр разрешений, который расширяет FormAuthenticationFilter
, и все мои запросы, не связанные с ajax от клиентов, проходят через этот фильтр. Итак, я добавил чек, чтобы узнать, заблокирована ли учетная запись пользователя в isAccessAllowed(...)
. Если он заблокирован, я регистрирую пользователя и позволяю фильтру продолжать работу. Он отправит их на страницу входа.
У этого есть один основной откат: это, по сути, опрос пользователя базы данных, который контролирует пользователя, чтобы узнать, заблокирована ли учетная запись.
Было бы лучше, если бы процесс блокировки учетной записи привел бы правильный предмет из сеанса пользователя и запустил этот сеанс. Я могу получить сеанс пользователя, но это, похоже, не помогает, поскольку я не могу получить правильный объект темы. Изменение сеанса, похоже, не помогает.
Для чего это стоит, Джаред Бантинг предложил другую хорошую идею, которая, к сожалению, не работала для меня. Его предложение состояло в том, чтобы проверить, когда вы получаете разрешение и роли, и не давайте кому-либо разрешения на заблокированную учетную запись. Это не сработало для меня, потому что я использую только аутентификацию, чтобы позволить пользователю иметь доступ (никаких других разрешений не требуется).
Мне кажется странным, что Широ кэширует информацию аутентификации в сеансе, но не кэширует информацию авторизации. Если я изменю разрешение пользователя, оно будет применено немедленно, но изменения в учетной записи пользователя не будут. –
Я предполагаю, что это связано с тем, как часто все меняется. Разрешения меняются чаще, чем информация об аутентификации. И это также зависит от реализации царства. – rdmueller
btw: есть ли что-то запирающее устройство? Я использую только в качестве плагина grails, и мое царство не поддерживает блокировку пользователей ... – rdmueller