我们的应用程序在 Sun Solaris 系统上运行,并安装了本地 WebSphere MQ。该应用程序使用绑定模式连接到队列管理器。尝试向本地队列发送消息时,JNDI 绑定成功但我们遇到javax.jms.JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager
错误。调查发现,用于身份验证的凭据(用户 ID)与运行应用程序的用户不区分大小写。用户 ID 匹配,但它不是区分大小写的匹配。默认情况下,运行应用程序的用户将通过身份验证,但这里区分大小写的匹配失败。应用程序服务器是 WebLogic。感谢任何输入。
2 回答
为了打开本地队列,应用程序必须首先成功连接到队列管理器。远程队列上的错误是连接错误,因此它甚至没有到达队列管理器。这表明您正在使用不同的连接工厂,而第二个连接工厂的连接参数存在一些差异。第一步是调和这些差异。
此外,MQJMS2013 安全错误可能有很多问题,其中大部分实际上并不是 MQ 问题。例如,有些人将他们的托管对象存储在 LDAP 中,并且那里的身份验证问题会引发此错误。对于使用基于文件系统的 JNDI 的人来说,操作系统文件权限可能会导致同样的事情。但是,如果这是一个实际的 WMQ 问题(这似乎是),那么链接的异常将包含 MQ 原因代码(例如,MQRC=2035)。如果您希望能够更好地诊断 MQ(或任何 JMS 传输)问题,养成打印链接异常的习惯是值得的。
如果您无法根据此输入解决此问题,我建议您使用托管对象定义的详细信息以及通过打印链接异常获得的原因代码来更新问题。
我们在 QueueConnectionFactory 中使用 createQueueConnection() 来创建连接,并通过使用方法 createQueueConnection("","") 解决了问题。unix 用户 ID (webA) 区分大小写,应用程序尝试使用不区分大小写的用户 ID (weba) 在 MQ 上进行身份验证,而 MQ 队列管理器拒绝连接尝试。你能告诉我们为什么应用程序之前发送不区分大小写的用户 ID (weba) 吗?
谢谢,阿伦