![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
vectorrr |
|
||||||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2007 Репутация: нет Всего: нет |
Добрый день!
появилась такая проблема как аутентификация и авторизация в jsf приложении. Как понял для этого необходим jaas, что бы поддерживать роли пользователей. Но вот с ним возникло гораздо больше проблем чем ожидал. У меня в базе для каждого пользователя проставляется роль, т.е после прохождения аутенфикации необходимо ограничить его доступ к некоторым ресурсам (администрирование, например). Пользователи не прошедшие аутентификацию так же имею доступ к небольшому набору ресурсов Набросал небольшой пример, но даже он не хочет работать в web.xml прописал следующее
как понял в jboss вместо файла конфигурации надо изменить login-config.xml в него добавил следующее
Написал свой CallbackHandler Как понимаю на него особой роли не возлагается, кроме как получения от пользователя введенных в форму логина и пароля?
сделал класс UserPrincipal
если правильно понял, то он используется как обертка для хранения различных единичных данных пользователя, будь то имя, роль и т.д? Далее идет LoginModule Как понимаю для jboss надо наследоваться от абстрактного класса AbstractServerLoginModule реализовал в нем абстрактные методы
Все это дело вызываю из бина, в методе осушествляющем логин LoginContext lc = new LoginContext ("auth", new CustomCallbackHandler("name", "password")); lc.login(); Оно валится в методе логин класса AbstractServerLoginModule Как понимаю, застопорился где-то вначале необходимой реализации всего этого добра. Если правильно понимаю, то именно в методе login() должно происходить подключение к базе и сравнение введенных логина и пароля с логином и паролем в базе? Т.е его нужно перегрузить тоже? А так же вопрос как правильно для пользователя должна устанавливаться роль? Если не сложно объясните кто-нибудь, пожалуйста, по шагам, что надо сделать, а то из всего что прочитал по этому поводу в итоге как оказалось ничего не помогло =) P.S. Прошу прощения за очень длинный пост =) |
||||||||||
|
|||||||||||
mbasil |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Как я понимаю логин модуль должен вызываться автоматически, если вы дополнительно создадите форму с названием formlogin.html типа:
А затем в дескрипторе развертывания опишите механизм аутентификации приложения и описание формы и страницы ошибок:
|
||||
|
|||||
vectorrr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2007 Репутация: нет Всего: нет |
в том и дело что логин модуль вызвается и так, но аутентификацию не проходит
основной вопрос в том, что в нем надо написать? как понял в методе login надо реализовать 1. подключение к базе и проверку, что совпадают логин и пароль. Если нет, то выбросить исключение 2. получить из базы роль пользователя (в случае успешности пункта 1) и куда-то ее установить. Вопрос куда? =) 3. что-то сделать в методе commit(). Тоже вопрос, что именно? Здесть устанавливается роль пользователя? Или я изначально не прав? |
|||
|
||||
Evgeni68 |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 9.7.2007 Репутация: 1 Всего: 3 |
Не проще ли воспользоваться готовым org.jboss.security.auth.spi.DatabaseServerLoginModule? т.е.
а так же в jboss-web.xml:
Это сообщение отредактировал(а) Evgeni68 - 18.11.2008, 18:58 |
||||||
|
|||||||
mbasil |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
To Evgeni68 Проще, но хуже с точки зрения переносимости.
И все же может быть проблема в методике инициирования аутентификации;
Сначала попробуйте инициировать аутентификацию, стандартным способом. Если не будет работать по прежнему то надо проверить вызываются ли ваши методы. Как я понимаю, это:
Вы взяли из какого-то примера JBosss? И getIdentity(), а также getRoleSets() должен вызывать сам их класс AbstractServerLoginModule. Вызывает ли, сделайте в этих методах простой вывод в журнал. Попробуйте получить текст класса AbstractServerLoginModule, например (это неприличное предложение), декомпиляцией. Сваяйте на основе этого текста свой класс (если удастся) и посмотрите, что в нем делается. Это сообщение отредактировал(а) mbasil - 19.11.2008, 10:01 |
||||
|
|||||
vectorrr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 27.8.2007 Репутация: нет Всего: нет |
Ну почему же неприличное предложение, по мне так вполне =)
Сделал свой класс из AbstractServerLoginModule все так же валится в методе логин, как в методе initialize нужные параметры null
в passwordStacking получается null, из-за чего useFirstPass = false, поэтому login и не проходит пока что не понял что такое (String)options.get("password-stacking"); методы getIdentity(), getRoleSets() не вызывает потому, что до них просто не доходит Вообщем надо смотреть дальше, вдруг что получится =) |
|||
|
||||
mbasil |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Все же сидит в подсознании интуитивное предположение, что в результате этого:
сервер не получает "password-stacking". Проверьте базовой аутентификацией, это ведь делается легко. В конце концов вы можете нахально сунуть useFirstPass = true; вне всяких if'ов и посмотреть, что получится. Это сообщение отредактировал(а) mbasil - 19.11.2008, 14:59 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |