从 java 发送到 MQ 始终使用 IBM MQ 版本 6.0 的默认安装 mqm 用户标识
我们的代码在 weblogic 和 MQ 6.0 中运行。无论我使用默认的 createQueueConnection() 或 createQueueConnection("myuserid","mypassword") ,它似乎总是使用 userid mqm 。请参阅下面的代码。
当我从版本 6.0 连接到较旧的 mq 安装 5 时,似乎会抛出以下错误 javax.jms.JMSSecurityException: MQJMS2013: 使用默认
createQueueConnection()< 为 MQQueueManager 提供的安全身份验证无效
/code> 除非我发送一个空白的用户 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();
Our code runs in weblogic and we MQ 6.0. No matter if I use the default createQueueConnection()
or createQueueConnection("myuserid","mypassword")
it always seems to use userid mqm
. See code below.
When I connect from version 6.0 to an older mq installion 5 it seems to throw the following error javax.jms.JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager
using the default createQueueConnection()
unless I send a blank userid/password as in createQueueConnection("","")
How can I get myuserid to be send instead ?
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();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
如果您在 createQueueConnection 中设置 ID,请放心,它将被呈现给队列管理器。您看到的问题是 QMgr 上的 SVRCONN 通道定义具有硬编码的值 MCAUSER('mqm')。这会覆盖客户端应用程序提供的任何值。
这里有几点需要注意。
有关此主题的更多信息以及 IMPACT 的 WMQ 安全演示和 WMQ 安全实验室指南的指针,请参阅 这个问题。
If you are setting the ID in the createQueueConnection, rest assured, it is being presented to the queue manager. The problem you are seeing is that the SVRCONN channel definition on the QMgr has the value MCAUSER('mqm') hard coded. This overrides any value presented by the client app.
A couple of things to note here.
For a LOT more on this topic and pointers to the WMQ security presentation and WMQ Security Lab guide from IMPACT, please see this SO question.