| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > EJB & JAAS |
| Автор: steals 27.7.2008, 17:16 |
| Доброго времени суток. Имеется задача написать аутентификацию/авторизацию для проги. Логика программы заключена в EJB 3.0. Список пользователей хранится в БД(postgresql). Запускается прга на аппсервере - glassfish 2 Для решения данной задачи было выбрано использовать JAAS. Написал свой LoginModule(почти). Вот только столкнулся с одной проблеммой, никак не могу получить ничего из базы используя JPA технологию. Существует ли какая-то возможность это реализовать или надо использовать методы по старинке(вручную коннектится к бд с помощью jdbc) ? Заранее спасибо. З.ы. хорошие статьи по реализации авторизации для ejb-компонентов приветствуются. |
| Автор: Ulysses4j 27.7.2008, 20:35 |
| Каким боком JAAS связана с JPA? Если у вас JPA не фунциклирует, значит не смогли настроить: курите мануалы к апп-серверу на эту тему. |
| Автор: steals 28.7.2008, 10:01 | ||
Проблема была в том, что для определения EntityManager использовалась аннотация @PersistenceContext. Так вот в LoginModule по этой аннотации ничего не инжектилось. Заменил на :
и все в принципе заработало. Теперь надо курить, как это все связать с авторизацией в ejb. |
| Автор: man_without_face 28.7.2008, 14:23 |
| Вообще Acegi лучше приспособлена к ECM приложениям. На IBM были доки на русском. Во! Нашёл. http://www.ibm.com/developerworks/ru/library/j-acegi1/ http://www.ibm.com/developerworks/ru/library/j-acegi2/ http://www.ibm.com/developerworks/ru/library/j-acegi3/ |
| Автор: steals 29.7.2008, 12:20 |
| Что-то я никак не пойму. Можно ли связать Атунтификацию через JAAS(собственный логин модуль) и авторизацию через декларативное описание в web.xml, ejb-jar.xml ? |
| Автор: man_without_face 29.7.2008, 14:00 |
| вроде нет. если не изменяет память, нужно копать xml'ники в серверах приложений (JBoss, Tomcat). Кстати буки же есть по JAAS. ТАм наверняка всё написано. |
| Автор: steals 29.7.2008, 14:09 |
| Вот и я все больше рпихожу к выводу, что не совмещаются эти технологии... :( Хм... а через что тогда обычно люди делают такого рода авторизацию? Уже кучу инфы перечитал в инете по джасу, но возможно я чего-то недопонимаю... |
| Автор: w1nd 30.7.2008, 10:16 |
| Если вы хотите получить собственную реализацию авторизации и аутентификации для EJB, то вам следует обратить внимание на спецификацию JSR 115, она же JAAC, она же Java Authorization Contract for Containers. Но самое главное - документация того конкретного сервера, который хотите использовать. Необходимый вам функционал выходит за рамки EJB и JEE и у всех реализован по своему. |
| Автор: steals 30.7.2008, 10:27 |
| Ну нужна пока авторизация и аутентификация для JSF, но в будующем понадобиться и для EJB. Сейчас делаю по http://developers.sun.com/appserver/reference/techart/as8_authentication/index.html думаю поможет. |
| Автор: mbasil 30.7.2008, 12:20 |
| Совершенно справедливо было отмечено, что у каждого сервера по своему. Я довольно долго бился в Tomcat для того, чтобы заставить сервер принимать специфическую JAAS аутентификацию. Думаю дело не в том, чтобы аутентифицировать, а в том, чтобы заставить сервер принять эту аутентификацию, после этого декларативная авторизация работает нормально. Кстати Sun пишет, что аутентификация web контейнером должна приниматься EJB контейнером, так что в этой части (с учетом сказанного выше) сомнений быть не должно. |
| Автор: vzf 31.7.2008, 10:43 |
| Что касается веб-приложений, обычно пишется свой логин-модуль и principals , эти реализации указываются в настройках сервера приложения. Всем остальным уже управляет контейнер и декларативное разграничение доступа нормально работает. Что касается ejb - не знаю, но думаю должно-быть что-то похожее. В томкате, например, есть JAASRealm. Он позволяет использовать свой логин-модуль и свои principals. В документации к томкату довольно неплохо написано как его настроить. Вообще вопрос настройки JAAS для аутентификации/авторизации в веб-приложениях не раз уже здесь обсуждали. Посмотри поиском. Вот книгу приводили: http://jaasbook.com/ Неплохая книга. Там рассказывается про JAAS и говорится как раз, как прикрутить свою реализацию логин-модуля к Tomcat'у при помощи его JAASRealm. Посмотри, может поможет. |
| Автор: mbasil 31.7.2008, 10:59 | ||
В Security FAQ для GlassFish имеется такое сообщение:
Попробуйте поискать примеры по названию классов |
| Автор: stron 31.7.2008, 18:07 |
| Сделай 2 модуля: 1. JAAS login модуль 2. EJB, который будет работать с базой и отвечать за вытягивание оттуда пользователей. Через этом же модуль можно админить пользователей. JAAS login модуль будет коннектиться к EJB, а тот уже к базе. |
| Автор: mturetskiy 29.8.2008, 16:41 |
| Столкнулся с той же проблемой. Написал свои LoginModule, CustomRealm, сконфигурировал их в конфиге Glassfish-a. Логин модуль срабатывает, связывается с Realm-ом для проверки данных, в итоге login проходит успешно. Однако не понятно, что надо сделать, что бы в EJB, которые я буду использовать дальше попадала эта инфа? Насколько я понимаю эти данные попадают в EJB при создании с SecurityContext-ом. Причём этот контекст берётся из SecurityContext'a web-контейнера. Пробовал самостоятельно создавать Subject, заполнять его данными о пользователе и на его основе создавать SecurityContext, устанавливая его текущим. И это помогало. Вот только как это надо делать на самом деле? Может быть кто то знает? |
| Автор: dimka 24.10.2008, 18:24 | ||
Может так:
|