Привет всем! Мне необходимо создать соединение с защищенным 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
--------------------
 нет времени думать - нужно писать КОД!
|