gpt4 book ai didi

java - 从 java 发送到 MQ 总是使用默认安装的 IBM MQ 版本 6.0 的 mqm 用户标识

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:02 27 4
gpt4 key购买 nike

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

当我从版本 6.0 连接到较旧的 mq 安装 5 时,它似乎抛出以下错误 javax.jms.JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager使用默认 createQueueConnection()除非我像 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,请放心,它正在呈现给队列管理器。您看到的问题是 SVRCONN channel 定义 QMgr 的值 MCAUSER('mqm') 是硬编码的。这会覆盖客户端应用程序提供的任何值。

这里有几点需要注意。

  1. 虽然您可以发送 ID 和密码,但 WMQ 接受这些内容。这些字段的存在是为了使凭据可用于可以验证它们的 channel 导出。如果没有这样的退出, channel 将以应用声称的任何 ID 运行,密码将被忽略。
  2. 出于上述原因,我总是告诉人们不要相信提供的凭据,除非他们有这样的导出。管理员必须将适当的值编码到 MCAUSER 中。
  3. 管理 ID(UNIX 风格上的“mqm”)不是合适的值。它向连接到该 channel 的任何人授予管理权限。

有关此主题的更多信息以及指向 IMPACT 的 WMQ 安全演示和 WMQ 安全实验室指南的指针,请参阅 this SO question .

关于java - 从 java 发送到 MQ 总是使用默认安装的 IBM MQ 版本 6.0 的 mqm 用户标识,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3781820/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com