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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как соединиться защищенным с EJB? с использованием Имени и Пароля. 
V
    Опции темы
powerOn
Дата 3.5.2006, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Привет всем!

Мне необходимо создать соединение с защищенным EJB.
Для этого я накатал простой EJB. Создал на сервере (SJSAS) пользователя (TestUser, пароль: 12345), с помощью deploytool создал роль (NewRole) и добавил туда TestUser. Далее с помощь того же deploytool потавил разрешение вызывать методы (все методы) моего бина только для NewRole. Потом успешно зарегистрировал компонент на сервере.

sun-ejb-jar.xml имеет следующий вид:
Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 EJB 2.1//EN" 

"http://www.sun.com/software/appserver/dtds/sun-ejb-jar_2_1-1.dtd">

<sun-ejb-jar>
  <security-role-mapping>
    <role-name>NewRole</role-name>
    <principal-name>TestUser</principal-name>
  </security-role-mapping>
  <enterprise-beans>
    <name>TestEJB</name>
    <ejb>
      <ejb-name>MyBean</ejb-name>
      <jndi-name>ejb/MyBean</jndi-name>
      <principal>
        <name>TestUser</name>
      </principal>
    </ejb>
  </enterprise-beans>
</sun-ejb-jar>



ejb-jar.xml имеет следующий вид:
Код

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.1" 

xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>TestEJB</display-name>
<enterprise-beans>
<session>
<display-name>MyBean</display-name>
<ejb-name>MyBean</ejb-name>
<home>pack.MyRemoteHome</home>
<remote>pack.MyRemote</remote>
<ejb-class>pack.MyBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>
<security-identity>
<run-as>
<role-name>NewRole</role-name>
</run-as>
</security-identity>
</session>
</enterprise-beans>
<assembly-descriptor>
<security-role>
<role-name>NewRole</role-name>
</security-role>
<method-permission>
<role-name>NewRole</role-name>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Remote</method-intf>
<method-name>sayHi</method-name>
<method-params>
<method-param>java.lang.String</method-param>
</method-params>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Home</method-intf>
<method-name>remove</method-name>
<method-params>
<method-param>java.lang.Object</method-param>
</method-params>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Home</method-intf>
<method-name>getHomeHandle</method-name>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Remote</method-intf>
<method-name>isIdentical</method-name>
<method-params>
<method-param>javax.ejb.EJBObject</method-param>
</method-params>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Home</method-intf>
<method-name>create</method-name>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Home</method-intf>
<method-name>remove</method-name>
<method-params>
<method-param>javax.ejb.Handle</method-param>
</method-params>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Remote</method-intf>
<method-name>getHandle</method-name>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Home</method-intf>
<method-name>getEJBMetaData</method-name>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Remote</method-intf>
<method-name>getPrimaryKey</method-name>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Remote</method-intf>
<method-name>remove</method-name>
</method>
<method>
<ejb-name>MyBean</ejb-name>
<method-intf>Remote</method-intf>
<method-name>getEJBHome</method-name>
</method>
</method-permission>
<container-transaction>
<method>
<ejb-name>MyBean</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>



Пишу простого клиента для компонента: 
Код

public class Main {
    
    /** Creates a new instance of Main */
    public Main() {
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        MyRemote bean;
        InitialContext jndiContext;
        try {
            jndiContext = new InitialContext();
            jndiContext.addToEnvironment(Context.SECURITY_CREDENTIALS, "12345");
            jndiContext.addToEnvironment(Context.SECURITY_PRINCIPAL, "TestUser");
   //       jndiContext.addToEnvironment(Context.SECURITY_AUTHENTICATION, "simple");
            Object ref  = jndiContext.lookup("ejb/MyBean");
            MyRemoteHome home = (MyRemoteHome) PortableRemoteObject.narrow(ref, MyRemoteHome.class);
            bean = home.create();
            System.out.println(bean.sayHi("Name"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    
}


в результате выполнения получаю:
Код

03.05.2006 20:12:43 com.sun.corba.ee.spi.logging.LogWrapperBase doLog
INFO: "IOP00710299: (INTERNAL) Successfully created IIOP listener on the specified host/port: all interfaces/1664"
java.rmi.AccessException: CORBA NO_PERMISSION 0 No; nested exception is: 
        org.omg.CORBA.NO_PERMISSION: ----------BEGIN server-side stack trace----------
org.omg.CORBA.NO_PERMISSION:   vmcid: 0x0  minor code: 0  completed: No
        at com.sun.enterprise.iiop.security.SecServerRequestInterceptor.receive_request(SecServerRequestInterceptor.java:398)
        at com.sun.corba.ee.impl.interceptors.InterceptorInvoker.invokeServerInterceptorIntermediatePoint(InterceptorInvoker.java:509)
        at com.sun.corba.ee.impl.interceptors.PIHandlerImpl.invokeServerPIIntermediatePoint(PIHandlerImpl.java:504)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.getServantWithPI(CorbaServerRequestDispatcherImpl.java:367)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:189)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1709)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1569)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:951)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:181)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:721)
        at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:469)
        at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1258)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:409)

----------END server-side stack trace----------  vmcid: 0x0  minor code: 0  completed: No
        at com.sun.corba.ee.impl.javax.rmi.CORBA.Util.mapSystemException(Util.java:195)
        at javax.rmi.CORBA.Util.mapSystemException(Util.java:67)
        at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:142)
        at com.sun.corba.ee.impl.presentation.rmi.bcel.BCELStubBase.invoke(Unknown Source)
        at pack._MyRemoteHome_DynamicStub.create(_MyRemoteHome_DynamicStub.java)
        at simpleejbclient.Main.main(Main.java:39)
Caused by: org.omg.CORBA.NO_PERMISSION: ----------BEGIN server-side stack trace----------
org.omg.CORBA.NO_PERMISSION:   vmcid: 0x0  minor code: 0  completed: No
        at com.sun.enterprise.iiop.security.SecServerRequestInterceptor.receive_request(SecServerRequestInterceptor.java:398)
        at com.sun.corba.ee.impl.interceptors.InterceptorInvoker.invokeServerInterceptorIntermediatePoint(InterceptorInvoker.java:509)
        at com.sun.corba.ee.impl.interceptors.PIHandlerImpl.invokeServerPIIntermediatePoint(PIHandlerImpl.java:504)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.getServantWithPI(CorbaServerRequestDispatcherImpl.java:367)
        at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:189)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1709)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1569)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:951)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:181)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:721)
        at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.dispatch(SocketOrChannelConnectionImpl.java:469)
        at com.sun.corba.ee.impl.transport.SocketOrChannelConnectionImpl.doWork(SocketOrChannelConnectionImpl.java:1258)
        at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:409)

----------END server-side stack trace----------  vmcid: 0x0  minor code: 0  completed: No
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.MessageBase.getSystemException(MessageBase.java:930)
        at com.sun.corba.ee.impl.protocol.giopmsgheaders.ReplyMessage_1_2.getSystemException(ReplyMessage_1_2.java:99)
        at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.getSystemExceptionReply(CorbaMessageMediatorImpl.java:595)
        at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.processResponse(CorbaClientRequestDispatcherImpl.java:407)
        at com.sun.corba.ee.impl.protocol.CorbaClientRequestDispatcherImpl.marshalingComplete(CorbaClientRequestDispatcherImpl.java:303)
        at com.sun.corba.ee.impl.protocol.CorbaClientDelegateImpl.invoke(CorbaClientDelegateImpl.java:184)
        at com.sun.corba.ee.impl.presentation.rmi.StubInvocationHandlerImpl.invoke(StubInvocationHandlerImpl.java:129)
        ... 3 more 



Подскажите, пожалуйста, что я забыл сделать, как правильно подсоединиться к компоненту используя имя и пароль?   

Это сообщение отредактировал(а) MoonCat - 3.5.2006, 19:36


--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
w1nd
Дата 3.5.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

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



А пользователь с указанным именем и паролем точно создан на серваке?  И еще: я бы сначала создал бы environment, а потом бы уже конструировал initialContext. И еще: что-то я не вижу, чтобы вы задавали initial context factory. 

Это сообщение отредактировал(а) w1nd - 3.5.2006, 22:22


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
powerOn
Дата 3.5.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата

А пользователь с указанным именем и паролем точно создан на серваке?  И еще: я бы сначала создал бы environment, а потом бы уже конструировал initialContext. И еще: что-то я не вижу, чтобы вы задавали initial context factory. 


Да конечно задан. w1nd, Спасибо за активность, на свое счастье я нашел решение:
http://forum.sun.com/jive/thread.jspa?thre...93&tstart=0
  

Это сообщение отредактировал(а) MoonCat - 3.5.2006, 22:23


--------------------
user posted image нет времени думать - нужно писать КОД!

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


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

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