| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > Как аутентифицировать пользователя вручную |
| Автор: bingo 6.9.2007, 00:59 | ||
| Ситуация такова, что после определенного количества невалидных попыток войти в систему, пользователь лочится на определенное время. Но не знаю теперь как реализовать так, что если период блокировки истекает, то пользователь может войти в систему. =) Делаю так: проверяю объект org.springframework.context.ApplicationEvent на "соответствие" классу org.acegisecurity.event.authentication.AuthenticationFailureLockedEvent и вношу соответствующие изменения в БД. Но вот как быть чтобы пользователя тут же и аутентифицировать?.. (т.е. сейчас получается, что пользователю приходится повторить попытку входа: 1-ый раз - аккаунт разблокируется, 2-ой раз - успешный вход =)). Первое что попалось в глаза - это метод setAuthenticated(boolean isAuthenticated) из org.acegisecurity.Authentication, но получил тут же exception:
И где этот конструктор... =) Подскажите, что можно сделать? |
| Автор: Zamuta 6.9.2007, 09:59 | ||
| bingo, я ловлю BadCredentialsException и после n неудачных попыток делаю его enable = false в бд (Помнишь, где при настройке applicationContext.xml указывется SELECT username, password, enabled FROM users WHERE username = ?). Для разлочки нужно запросить ключ. Количество неудачных попыток храню в сессии.... Добавлено через 1 минуту и 44 секунды
Храни в сессии, как сессия умрёт, так и пускай заного... |
| Автор: bingo 6.9.2007, 21:59 | ||
Что-то не совсем понял про это =):
Вообщем логика в моем понимании и как я предполагаю реализовать 'enabled' - это для пользователей, чтоб могли друг друга отключать вручную, а 'nonLocked' - для автоматической блокировки/разблокировки пользователей при входе в систему. Сессия - вариант, бесспорно, но мне не нравится, т.к. если "клиент" создает новую сессию каждый раз, то получается аккаунт никогда не заблокируется. И кроме того, я хочу блокировку делать, ну минут 10 или 20, а для жизни сессии это как-то маловато. |
| Автор: Zamuta 7.9.2007, 08:33 | ||||||||||||
Расскажи про специфику приложения. Не понятно зачем пользователи будут отключать друг друга.
Как узнать, что пользователь вводит не тот пароль? Ловить BadCredentialsException . А как иначе? Вот по этому событию и делай что хочешь. Хоть поля для ввода логина и пароля делай неактивными.
Вот именно, что не заблокируется. Будет каждый раз браузер по новой открывать и вводить пароль. Но так он всё равно простым перебором не сможет сломать, глупо это. Почему 10 или 20 минут это мало. 10 или 20 минут с последней активности пользователя. Т.е. если в сессии нет активности 10 или 20 минут то тогда она умирает....
Это:
|
| Автор: bingo 7.9.2007, 15:09 | ||||||||
Это я просто так выразился =), администраторы могут "выключать" пользователей.
Это я понял =), вопрос в другом.
Это и смущает, что точно сказать нельзя когда аккаунт разлочится. А 10-20 минут мало для сессии, т.к. в принципе пользователи будут что-то запускать, заниматься своими делами, а потом будут возвращаться к работе с моим приложением через полчаса, а может и позже.
Я просто по-другому делаю, через свою имплементацию сервиса и соотвующего DAO. ps: вообщем не знаю =), хочу сделать как задумал изначально, т.е. главный вопрос как аутентифицировать пользователя вручную в моей имплементации org.springframework.context.ApplicationListener и отлавливая соответсвующие acegi-even'ы. |