对于IBM MQ 6.0版,从java发送到MQ始终使用默认安装的mqm用户ID

对于IBM MQ 6.0版,从java发送到MQ始终使用默认安装的mqm用户ID,java,jms,weblogic,ibm-mq,Java,Jms,Weblogic,Ibm Mq,我们的代码在weblogic和MQ 6.0中运行。无论我使用默认的createQueueConnection()还是createQueueConnection(“myuserid”、“mypassword”)它似乎总是使用useridmqm。请参阅下面的代码 当我从版本6.0连接到较旧的mq安装5时,它似乎抛出以下错误javax.jms.JMSSecurityException:MQJMS2013:使用默认的createQueueConnection()为MQQueueManager提供的安全身

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

当我从版本6.0连接到较旧的mq安装5时,它似乎抛出以下错误
javax.jms.JMSSecurityException:MQJMS2013:使用默认的
createQueueConnection()
为MQQueueManager提供的安全身份验证无效,除非我像
createQueueConnection(“,”)中那样发送一个空的用户ID/密码

我怎样才能让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();

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

这里有几件事需要注意

  • 虽然您可以发送ID和密码,但WMQ从表面上接受它们。这些字段的存在是为了使凭据可用于可对其进行验证的通道出口。如果没有这样一个出口,该频道将以应用程序声称的任何ID运行,密码将被忽略
  • 出于上述原因,我总是告诉人们不要相信提交的凭证,除非他们有这样的出口。管理员必须将适当的值编码到MCAUSER中
  • 管理ID(“UNIX版本上的mqm”)不是适当的值。它授予通过该频道连接的任何人管理权限

  • 有关此主题的更多信息以及IMPACT中的WMQ安全演示和WMQ安全实验室指南,请参阅。

    Thnaks T.Rob以获得澄清。此外,我确实看到了将MQ6 java JAR连接到MQ5安装的区别。它似乎不是100%兼容的,因为在这种情况下用户ID不会被覆盖。但是将空白字符串作为userid/password传递似乎与该场景中QMgr使用默认的mqm userid一样有效。我应该提到WMQ 5.x已经有一段时间不受支持了,WMQ v6从2011年9月起就不受支持了。如果可能,在客户端和QMgr上都移动到v7。通常我会说,您可以使用比QMgr更高版本的客户机,并在必要时首先进行升级-但是v7客户机没有使用v5 QMgr AKAIK进行测试,因此,如果这将是一个生产系统,并且您希望能够针对它打开IBM PMR,请升级所有内容。