使用另一个 JBoss 服务器上的经过身份验证的用户在远程 JBoss 服务器上进行 JNDI 查找

JNDI lookup on remote JBoss server using authenticated user on another JBoss server

我正在开发一个简单的 JMS 队列管理 Web 应用程序,该应用程序正在从 WebLogic 迁移到 JBoss EAP 7.1。该应用程序用于 search/delete/move 各种队列上的消息。以前,管理应用程序和它管理的队列(我称之为 "queue server")都在同一个 WebLogic 服务器上。现在,管理应用程序和队列服务器将位于不同的容器中,每个 运行 在一个 JBoss 服务器中。管理应用程序和队列服务器均使用 LDAPExtended 登录模块进行保护。

管理应用程序获取对队列服务器的 InitialContext 的引用并使用 JNDI 获取 QueueConnectionFactory,使用此(已编辑)代码:

Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
env.put(Context.PROVIDER_URL, "remote://pams-pams-dev.ocpdev.aipo.gov.au:30746");
env.put(Context.URL_PKG_PREFIXES, "org.jboss.as.naming.interfaces");
env.put(Context.SECURITY_PRINCIPAL, "username");
env.put(Context.SECURITY_CREDENTIALS, "password");
InitialContext context = new InitialContext(env);
QueueConnectionFactory connectionFactory = (QueueConnectionFactory) context.lookup("ConnectionFactory");

登录用户在SessionContext 的管理应用程序中可用,但我不知道如何将用户详细信息传递到队列服务器。这可能吗,还是我需要通过其他方式进行设置?

据我所知,您无法(隐式或以其他方式)将用户凭据从 SessionContext 传递到 InitialContext 以进行 JNDI 查找。此外,即使您可以将凭据传递给 InitialContext,您仍然可能需要将它们传递给您查找的 javax.jms.QueueConnectionFactory 上的 createConnection 方法(因为 JNDI 和 JMS 安全性是彼此独立),我也不认为这是可能的。