Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как аутентифицировать пользователя вручную, acegi-security 
:(
    Опции темы
bingo
Дата 6.9.2007, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.12.2006
Где: Minsk, Belarus

Репутация: нет
Всего: нет



Ситуация такова, что после определенного количества невалидных попыток войти в систему, пользователь лочится на определенное время.
Но не знаю теперь как реализовать так, что если период блокировки истекает, то пользователь может войти в систему. =)
Делаю так:
проверяю объект org.springframework.context.ApplicationEvent на "соответствие" классу org.acegisecurity.event.authentication.AuthenticationFailureLockedEvent и вношу соответствующие изменения в БД. Но вот как быть чтобы пользователя тут же и аутентифицировать?.. (т.е. сейчас получается, что пользователю приходится повторить попытку входа: 1-ый раз - аккаунт разблокируется, 2-ой раз - успешный вход =)).
Первое что попалось в глаза - это метод setAuthenticated(boolean isAuthenticated) из org.acegisecurity.Authentication, но получил тут же exception:
Код

java.lang.IllegalArgumentException: Cannot set this token to trusted - use constructor containing GrantedAuthority[]s instead

И где этот конструктор... =)
Подскажите, что можно сделать?
PM   Вверх
Zamuta
Дата 6.9.2007, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



bingo, я ловлю BadCredentialsException и после n неудачных попыток делаю его enable = false в бд (Помнишь, где при настройке applicationContext.xml указывется SELECT username, password, enabled FROM users WHERE username = ?). Для разлочки нужно запросить ключ. Количество неудачных попыток храню в сессии....

Добавлено через 1 минуту и 44 секунды
Цитата

что если период блокировки истекает, то пользователь может войти в систему.


Храни в сессии, как сессия умрёт, так и пускай заного...


--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
bingo
Дата 6.9.2007, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.12.2006
Где: Minsk, Belarus

Репутация: нет
Всего: нет



Что-то не совсем понял про это =): 
Цитата

Помнишь, где при настройке applicationContext.xml указывется SELECT username, password, enabled FROM users WHERE username = ?

Вообщем логика в моем понимании и как я предполагаю реализовать 'enabled' - это для пользователей, чтоб могли друг друга отключать вручную, а 'nonLocked' - для автоматической блокировки/разблокировки пользователей при входе в систему.

Сессия - вариант, бесспорно, но мне не нравится, т.к. если "клиент" создает новую сессию каждый раз, то получается аккаунт никогда не заблокируется. И кроме того, я хочу блокировку делать, ну минут 10 или 20, а для жизни сессии это как-то маловато.
PM   Вверх
Zamuta
Дата 7.9.2007, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 18.1.2006

Репутация: 4
Всего: 6



Цитата
Вообщем логика в моем понимании и как я предполагаю реализовать 'enabled' - это для пользователей, чтоб могли друг друга отключать вручную, а 'nonLocked' - для автоматической блокировки/разблокировки пользователей при входе в систему.

Расскажи про специфику приложения. Не понятно зачем пользователи будут отключать друг друга.
Цитата
Ситуация такова, что после определенного количества невалидных попыток войти в систему, пользователь лочится на определенное время.
Но не знаю теперь как реализовать так, что если период блокировки истекает, то пользователь может войти в систему. =)

Как узнать, что пользователь вводит не тот пароль? Ловить BadCredentialsException . А как иначе? Вот по этому событию и делай что хочешь. Хоть поля для ввода логина и пароля делай неактивными. 
Цитата
Сессия - вариант, бесспорно, но мне не нравится, т.к. если "клиент" создает новую сессию каждый раз, то получается аккаунт никогда не заблокируется. И кроме того, я хочу блокировку делать, ну минут 10 или 20, а для жизни сессии это как-то маловато. 

Вот именно, что не заблокируется. Будет каждый раз браузер по новой открывать и вводить пароль. Но так он всё равно простым перебором не сможет сломать, глупо это. 
Почему 10 или 20 минут это мало. 10 или 20 минут с последней активности пользователя. Т.е. если в сессии нет активности 10 или 20 минут то тогда она умирает....
Цитата
Что-то не совсем понял про это =): 
Цитата 
Цитата
Помнишь, где при настройке applicationContext.xml указывется SELECT username, password, enabled FROM users WHERE username = ?


Это:
Код

<bean id="userDetailsService" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="usersByUsernameQuery">
            <value>SELECT username, password, enabled FROM users WHERE username = ?</value>
        </property>
        <property name="authoritiesByUsernameQuery">
            <value>SELECT username, authority FROM users WHERE username = ?</value>
        </property> 
    </bean>



--------------------
Thank you opensource.
PM MAIL ICQ   Вверх
bingo
Дата 7.9.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 2.12.2006
Где: Minsk, Belarus

Репутация: нет
Всего: нет



Цитата

Расскажи про специфику приложения. Не понятно зачем пользователи будут отключать друг друга.

Это я просто так выразился =), администраторы могут "выключать" пользователей.
Цитата

Как узнать, что пользователь вводит не тот пароль? Ловить BadCredentialsException . А как иначе? Вот по этому событию и делай что хочешь. Хоть поля для ввода логина и пароля делай неактивными. 

Это я понял =), вопрос в другом.
Цитата

10 или 20 минут с последней активности пользователя.

Это и смущает, что точно сказать нельзя когда аккаунт разлочится.
А 10-20 минут мало для сессии, т.к. в принципе пользователи будут что-то запускать, заниматься своими делами, а потом будут возвращаться к работе с моим приложением через полчаса, а может и позже.
Цитата

SELECT username, password, enabled FROM users WHERE username = ?

Я просто по-другому делаю, через свою имплементацию сервиса и соотвующего DAO.

ps: вообщем не знаю =), хочу сделать как задумал изначально, т.е. главный вопрос как аутентифицировать пользователя вручную в моей имплементации org.springframework.context.ApplicationListener и отлавливая соответсвующие acegi-even'ы.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0711 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.