从java发送到MQ始终使用缺省安装的mqm userid用于IBM MQ V6.0

时间:2010-09-23 19:26:45

标签: java jms weblogic ibm-mq

我们的代码在weblogic和MQ 6.0中运行。无论我使用默认的createQueueConnection()还是createQueueConnection("myuserid","mypassword"),它似乎总是使用用户ID mqm。请参阅下面的代码。

当我从6.0版连接到较旧的mq installion 5时,似乎使用默认的javax.jms.JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager抛出以下错误createQueueConnection(),除非我发送空白的用户ID /密码,如createQueueConnection("","")

如何才能发送myuserid?

Hashtable properties = new Hashtable(2);
properties.put(Context.PROVIDER_URL,context);
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");

InitialContext ctx = new InitialContext(properties);
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("QCF");
QueueConnection qc = qcf.createQueueConnection();
javax.jms.Queue q = (javax.jms.Queue) ctx.lookup("MYQUEUE");
QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
TextMessage tm = qs.createTextMessage();
tm.setText(outString);
QueueSender sender = qs.createSender(q);
sender.send(tm);
sender.close();
qs.close();
qc.close();

1 个答案:

答案 0 :(得分:3)

如果您在createQueueConnection中设置ID,请放心, 将被呈现给队列管理器。您遇到的问题是QMgr 上的SVRCONN通道定义具有硬编码的值MCAUSER('mqm')。这将覆盖客户端应用程序提供的任何值。

这里有几点需要注意。

  1. 虽然您可以发送ID和密码,但WMQ会以面值接受这些内容。存在这些字段以使凭证可用于可以验证它们的通道出口。如果没有这样的退出,频道就会以应用声称的任何ID运行,并忽略密码。
  2. 由于上述原因,我总是告诉人们不要相信所提供的凭证,除非他们有这样的退出。管理员必须将适当的值编码到MCAUSER中。
  3. 管理ID(UNIX flavor上的'mqm')不是合适的值。它赋予在该频道上连接的任何人的管理权限。
  4. 有关此主题的更多内容以及IMPACT的WMQ安全演示和WMQ安全实验室指南的指示,请参阅this SO question