Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在远程调用TomEE上的EJB时会出现AuthenticationException?_Java_Jakarta Ee_Ejb 3.0_Apache Tomee_Tomee 7 - Fatal编程技术网

Java 为什么在远程调用TomEE上的EJB时会出现AuthenticationException?

Java 为什么在远程调用TomEE上的EJB时会出现AuthenticationException?,java,jakarta-ee,ejb-3.0,apache-tomee,tomee-7,Java,Jakarta Ee,Ejb 3.0,Apache Tomee,Tomee 7,我有一个运行在Tomee7.0.3服务器上的ejb。顺便说一句,所有这些都在1.7.4版中起作用。 我已经使用tomcat-users.xml文件设置了一组用户 <tomcat-users> <role rolename="admin" /> <role rolename="admin-gui" /> <role rolename="admin-script" /> <role rolename="manage

我有一个运行在Tomee7.0.3服务器上的ejb。顺便说一句,所有这些都在1.7.4版中起作用。 我已经使用tomcat-users.xml文件设置了一组用户

<tomcat-users>
    <role rolename="admin" />
    <role rolename="admin-gui" />
    <role rolename="admin-script" />
    <role rolename="manager" />
    <role rolename="manager-gui" />
    <role rolename="manager-script" />
    <role rolename="manager-jmx" />
    <role rolename="manager-status" />
    <role rolename="tomee-admin" />
    <user
        name="admin"
        password="admin"
        roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status,tomee-admin" />
    <role rolename="tomcat" />
    <user
        name="tomcat"
        password="tomcat"
        roles="tomcat" />
    <user
        name="manager"
        password="manager"
        roles="manager" />
</tomcat-users>
下面是调用ejb的代码

public static Object locateService(String serviceName) throws NamingException, IOException {
    InputStream in = ServiceLocator.class.getClassLoader().getResourceAsStream("servicelocator.properties");
    Properties p = new Properties();
    p.load(in);
    InitialContext ctx = new InitialContext(p);
    return ctx.lookup("PaymentManagerRemote");
}
正如您所看到的,我提供了正确的用户名和密码,但我得到了以下异常

Apr 27, 2017 12:39:07 PM org.apache.openejb.client.EventLogger log
INFO: RemoteInitialContextCreated{providerUri=http://127.0.0.1:8082/tomee/ejb}
Exception in thread "main" javax.naming.AuthenticationException: Error while communicating with server: ; nested exception is: 
    javax.naming.AuthenticationException
    at org.apache.openejb.client.JNDIContext.authenticate(JNDIContext.java:381)
    at org.apache.openejb.client.JNDIContext.getInitialContext(JNDIContext.java:289)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
    at javax.naming.InitialContext.init(InitialContext.java:244)
    at javax.naming.InitialContext.<init>(InitialContext.java:216)
    at co.uk.meghdoot.core.util.ServiceLocator.locateService(ServiceLocator.java:20)
    at co.uk.meghdoot.core.test.DeviceLocationTest.setUp(DeviceLocationTest.java:53)
    at co.uk.meghdoot.core.test.DeviceLocationTest.main(DeviceLocationTest.java:109)
2017年4月27日12:39:07 PM org.apache.openejb.client.EventLogger日志
信息:RemoteInitialContextCreated{providerUri=http://127.0.0.1:8082/tomee/ejb}
线程“main”javax.naming.AuthenticationException中出现异常:与服务器通信时出错:;嵌套异常是:
javax.naming.AuthenticationException
位于org.apache.openejb.client.JNDIContext.authenticate(JNDIContext.java:381)
位于org.apache.openejb.client.JNDIContext.getInitialContext(JNDIContext.java:289)
位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
位于javax.naming.InitialContext.init(InitialContext.java:244)
位于javax.naming.InitialContext。(InitialContext.java:216)
位于co.uk.meghdoot.core.util.ServiceLocator.locateService(ServiceLocator.java:20)
位于co.uk.meghdoot.core.test.DeviceLocationTest.setUp(DeviceLocationTest.java:53)
位于co.uk.meghdoot.core.test.DeviceLocationTest.main(DeviceLocationTest.java:109)

有人能解释一下吗?

使用tomcat-users.xml假设您使用UserDatabaseRealm作为server.xml中的领域,但情况可能并非如此(您的问题中没有写)。这还假设身份验证是通过servlet/tomcat主干完成的。默认情况下并非如此,直到您在tomee webapp中添加了它(您可以物理地创建它并定义ejbd servlet-请参阅-执行请求的筛选器。login()


使用ejbd协议,tomee将使用tomee安全服务自动登录,默认情况下,该服务将依赖于server.xml的第一个域。

使用tomcat-users.xml时,假设您在server.xml中使用UserDatabaseRealm作为域,但情况可能并非如此(您的问题中没有说明)。这还假设身份验证是通过servlet/tomcat主干完成的。在添加到tomee webapp之前,默认情况下不是这样的(您可以物理创建它并定义ejbd servlet-请参阅-执行请求的筛选器。login()


使用ejbd协议,tomee将自动使用tomee安全服务登录,默认情况下,该服务将依赖于server.xml的第一个域。

我已经通过了您发送的链接。我收到的错误是身份验证异常,而不是序列化错误。如果对白名单和黑名单进行任何更改,我应该可以要调用远程ejb,默认的黑名单应该可以正常工作而不做任何更改。您是否也正确设置了jaas(JVM系统属性+JAASRealm)?不,我没有设置jaas realm。这是TOME新版本的要求吗?您能否指出一些文档。对于新TOME,它在绕过tomcat层(ejbd)时始终依赖jaas。这篇文章解释了如何设置它。我可以从浏览器中看到localhost:8080/tomee/ejb页面,所以为什么远程客户端看不到它?我已经通过了您发送的链接。我得到的错误是一个AuthenticationException,而不是序列化错误。如果对白名单和黑名单进行任何更改,我应该能够对于远程ejb,默认黑名单应该可以正常工作,没有任何更改。您是否也正确设置了jaas(JVM系统属性+JAASRealm)?不,我没有设置jaas realm。这是新版本的tomee的要求吗?您能指出一些文档吗?对于新的tomee,它在绕过tomcat层(ejbd)时总是依赖jaas。这篇文章解释了如何设置它。我可以从浏览器中看到localhost:8080/tomee/ejb页面,为什么远程客户端看不到它?
java.naming.factory.initial=org.apache.openejb.client.RemoteInitialContextFactory
java.naming.provider.url=http://127.0.0.1:8082/tomee/ejb
java.naming.security.principal=admin
java.naming.security.credentials=admin
public static Object locateService(String serviceName) throws NamingException, IOException {
    InputStream in = ServiceLocator.class.getClassLoader().getResourceAsStream("servicelocator.properties");
    Properties p = new Properties();
    p.load(in);
    InitialContext ctx = new InitialContext(p);
    return ctx.lookup("PaymentManagerRemote");
}
Apr 27, 2017 12:39:07 PM org.apache.openejb.client.EventLogger log
INFO: RemoteInitialContextCreated{providerUri=http://127.0.0.1:8082/tomee/ejb}
Exception in thread "main" javax.naming.AuthenticationException: Error while communicating with server: ; nested exception is: 
    javax.naming.AuthenticationException
    at org.apache.openejb.client.JNDIContext.authenticate(JNDIContext.java:381)
    at org.apache.openejb.client.JNDIContext.getInitialContext(JNDIContext.java:289)
    at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:684)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:313)
    at javax.naming.InitialContext.init(InitialContext.java:244)
    at javax.naming.InitialContext.<init>(InitialContext.java:216)
    at co.uk.meghdoot.core.util.ServiceLocator.locateService(ServiceLocator.java:20)
    at co.uk.meghdoot.core.test.DeviceLocationTest.setUp(DeviceLocationTest.java:53)
    at co.uk.meghdoot.core.test.DeviceLocationTest.main(DeviceLocationTest.java:109)