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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Eclipse RAP и JBoss JAAS 
:(
    Опции темы
sandello
Дата 21.5.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В своем проекте использую WEB-клиента, написанного на Eclipse RAP и JBoss 4.2.1 в качестве сервера приложений.
На одном из этапов дозрели до того, что бы органичивать доступ smile
Первое решение было очень просто: в клиентский WAR'ник добавили jboss-web.xml и пару строчек в web.xml, настроили JAAS на JBoss'е.
Доступ к EJB ни как не контролировался.
Пользователь, когда открывал приложение в браузере, видел форму для ввода имени/пароля. Все замечательно.

Теперь второй шаг: нужно ограничивать доступ к EJB. Думал, что все будет просто - добавил  к каждом SSEJB
Код

@SecurityDomain("MyDomain")

А оказалось - полный облом :( Вылетает исключение
Код

21:07:30,735 ERROR [STDERR] javax.ejb.EJBAccessException: Authentication failure
21:07:30,735 ERROR [STDERR]     at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.handleGener
alSecurityException(Ejb3AuthenticationInterceptor.java:68)
21:07:30,735 ERROR [STDERR]     at org.jboss.aspects.security.AuthenticationInterceptor.invoke(Authe
nticationInterceptor.java:70)
21:07:30,735 ERROR [STDERR]     at org.jboss.ejb3.security.Ejb3AuthenticationInterceptor.invoke(Ejb3
AuthenticationInterceptor.java:106)
21:07:30,735 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,735 ERROR [STDERR]     at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInt
erceptor.java:46)
21:07:30,735 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,735 ERROR [STDERR]     at org.jboss.ejb3.asynchronous.AsynchronousInterceptor.invoke(Asynch
ronousInterceptor.java:106)
21:07:30,735 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,736 ERROR [STDERR]     at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(Statele
ssContainer.java:278)
21:07:30,736 ERROR [STDERR]     at org.jboss.aop.Dispatcher.invoke(Dispatcher.java:106)
21:07:30,736 ERROR [STDERR]     at org.jboss.aspects.remoting.AOPRemotingInvocationHandler.invoke(AO
PRemotingInvocationHandler.java:82)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.ServerInvoker.invoke(ServerInvoker.java:734)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.transport.socket.ServerThread.processInvocatio
n(ServerThread.java:560)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.transport.socket.ServerThread.dorun(ServerThre
ad.java:369)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.transport.socket.ServerThread.run(ServerThread
.java:165)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteCli
entInvoker.java:163)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.Client.invoke(Client.java:1550)
21:07:30,736 ERROR [STDERR]     at org.jboss.remoting.Client.invoke(Client.java:530)
21:07:30,736 ERROR [STDERR]     at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeR
emoteInterceptor.java:62)
21:07:30,737 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,737 ERROR [STDERR]     at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(Client
TxPropagationInterceptor.java:61)
21:07:30,737 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,737 ERROR [STDERR]     at org.jboss.aspects.security.SecurityClientInterceptor.invoke(Secur
ityClientInterceptor.java:53)
21:07:30,737 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,737 ERROR [STDERR]     at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalIntercep
tor.java:72)
21:07:30,737 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,737 ERROR [STDERR]     at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRem
oteProxy.java:103)
21:07:30,737 ERROR [STDERR]     at $Proxy214.find(Unknown Source)
21:07:30,737 ERROR [STDERR]     at com.company.myproject.ui.server.SelectServerAction.run(SelectServ
erAction.java:26)
21:07:30,737 ERROR [STDERR]     at com.company.myproject.ui.server.SelectServerAction.run(SelectServ
erAction.java:1)
21:07:30,738 ERROR [STDERR]     at com.company.myproject.ui.server.common.AJob.run(AJob.java:23)
21:07:30,738 ERROR [STDERR]     at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
21:07:30,738 ERROR [STDERR]     at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeR
emoteInterceptor.java:74)
21:07:30,738 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,738 ERROR [STDERR]     at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(Client
TxPropagationInterceptor.java:61)
21:07:30,738 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,738 ERROR [STDERR]     at org.jboss.aspects.security.SecurityClientInterceptor.invoke(Secur
ityClientInterceptor.java:53)
21:07:30,738 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,738 ERROR [STDERR]     at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalIntercep
tor.java:72)
21:07:30,738 ERROR [STDERR]     at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocat
ion.java:101)
21:07:30,738 ERROR [STDERR]     at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRem
oteProxy.java:103)
21:07:30,739 ERROR [STDERR]     at $Proxy214.find(Unknown Source)
21:07:30,739 ERROR [STDERR]     at com.company.myproject.ui.server.SelectServerAction.run(SelectServ
erAction.java:26)
21:07:30,739 ERROR [STDERR]     at com.company.myproject.ui.server.SelectServerAction.run(SelectServ
erAction.java:1)
21:07:30,739 ERROR [STDERR]     at com.company.myproject.ui.server.common.AJob.run(AJob.java:23)
21:07:30,739 ERROR [STDERR]     at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


Особенность клентской части в том, что большинство запросов обрабатываются в фоне в отдельном потоке (кажется, это Job'ам в eclipse  зовут). Может быть, проблема в этом.
Как заставить RAP-приложение корретно логироваться в JAAS при работе? Почему сейчас не сработало?
Когда экспериментировал с простым JSP - все работало корректно. Залогировался в на WEB - EJB стали доступны.


--------------------
user posted image
PM MAIL Jabber   Вверх
mindflyer
Дата 26.5.2008, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

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



Цитата(sandello @  21.5.2008,  12:25 Найти цитируемый пост)
Особенность клентской части в том, что большинство запросов обрабатываются в фоне в отдельном потоке (кажется, это Job'ам в eclipse  зовут). Может быть, проблема в этом.

Секьюрити в JBoss работает в рамках потоков, т.е. threadLocal.
У тебя основной поток, в котором обрабатывается запрос, стартует фоновые потоки, которые и не могут обратиться к EJB?
Если так, то нужно самому делать логин, т.е. в Java-коде, хотя ты ведь не имеешь доступа к паролю текущего пользователя...  Наверное, есть какие-то прозрачные способы "просачивания" внешней авторизации и в другие потоки, но я их не знаю. Можно посмотреть внутренности JBoss по работе с авторизацией и вручную выставить нужных принципалов в новых потоках. Когда-то давно бегло смотрел тот код, вроде вполне реализуемая вещь.

А зачем тебе вообще ограничивать доступ именно к EJB, если контроль доступа осуществляется на уровне веб-клиента? Пусть EJB реализует только локальный интерфейс и никто извне не сможет до них достучаться. Или права на EJB могут быть более строгими, чем в веб-клиенте?
PM MAIL ICQ   Вверх
sandello
Дата 26.5.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Плюсы в контроле доступа на EJB не только в собственно контроле доступа. Но и возможноти получения информации из security contex'а. На пример, кто это тут безобразничает...
Кроме того, в RAP'е организовать контроль что кому можно делать - думаю ооччень не просто. По крайней мере, применительно к моему случаю будет сильно дороже.


--------------------
user posted image
PM MAIL Jabber   Вверх
mindflyer
Дата 26.5.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 20.10.2004
Где: Smolensk, Russia

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



Цитата(sandello @  26.5.2008,  13:21 Найти цитируемый пост)
Плюсы в контроле доступа на EJB не только в собственно контроле доступа. Но и возможноти получения информации из security contex'а. На пример, кто это тут безобразничает...

Для решения конкретно этой задачи можно инициализировать собственный threalLocal контекст при старте новых потоков, в который и помещать информацию о пользователе.

Цитата(sandello @  26.5.2008,  13:21 Найти цитируемый пост)
Кроме того, в RAP'е организовать контроль что кому можно делать - думаю ооччень не просто. По крайней мере, применительно к моему случаю будет сильно дороже. 

Про RAP посоветовать ничего не могу, web-клиентов никогда не писал.

А в целом, на твоём месте полез бы в исходники JBoss, дабы посмотреть из каких своих структур он извлекает информацию о секьюрити, и написал бы код по установке требуемых данных в новых потоках. 
Либо ещё проще - можно делать java-кодом логин с указанием только имени пользователя, а пароль не устанавливать, и в некую threadLocal пихать флаг, говорящий о том, что пароль проверять не нужно. И перекрыть проверку пароля в собственном модуле UsersRolesLoginModule.

Согласен, не красиво, но работать будет.
Если кто-то подскажет правильный способ - буду благодарен.
PM MAIL ICQ   Вверх
sandello
Дата 26.5.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Исходники я уже перерыл вдоль и поперек smile или почти вдоль и чуть поперк  smile
Использование встроенных механизмов JBOSS'а  лучше тем, что мне не надо заморачиваться и передавать имя пользователя в EJB-часть в качестве аргументов. Надо лишь настроить JAAS. Плюс использование официальных возможностей дает некоторую гарантию, что это будет работать и в следующих версиях. Или, по крайней мере, будет написано как перейти.
Использование всяких хитрых трюков, основанных на конкретной реализации - плохой тон. Особенно, когда есть нормальные решения.



--------------------
user posted image
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0430 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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