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

时间:2019-09-20 04:12:21

标签: java jboss jms jndi

我正在研究一个简单的JMS队列管理Web应用程序,该应用程序已从WebLogic迁移到JBoss EAP 7.1。该应用程序用于搜索/删除/移动各种队列中的消息。以前,管理应用程序及其管理的队列(我称其为“队列服务器”)都位于同一WebLogic服务器上。现在,管理应用程序和队列服务器将位于不同的容器中,每个容器都在JBoss服务器中运行。管理应用程序和队列服务器均使用LDAP扩展登录模块进行保护。

管理应用程序使用以下(已编辑的)代码获取对队列服务器的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的管理应用程序中可用,但是我不知道如何将用户详细信息传递给队列服务器。这可能吗,或者我还需要其他设置方法吗?

1 个答案:

答案 0 :(得分:1)

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