java - 尝试访问 IBM MQ 中的队列时出现 DetailedJMSSecurityException

标签 java ibm-mq

这是我的问题。

我正在使用 IBM MQ V7.1 的试用版。我已经创建了一个队列管理器 MYQM,一个 channel MY_SVRCONNMCA User Id abc。我已向用户提供 abc 以访问 MYQM。我正在尝试将消息放入队列 Q1。但是在获得队列连接时,我遇到了异常。

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'MYQM' with connection mode 'Client' and host name '(1500)'. Please check if the supplied username and password are correct on the QueueManager to which you are connecting.

我使用下面的命令允许用户 abc 访问 MYQM

[mqm@localhost ~]$ setmqaut -m MYQM -t qmgr -p abc +connect
The setmqaut command completed successfully.

这是我的Java程序

 public class MqPut
 {
     public static void main(String[] args)
     {
      sendMsg("Sample Message");
     }
     public static void sendMsg(String msg)
     {
       MQQueueConnectionFactory connectionFactory = null;
       QueueConnection queueConn = null;
       QueueSession queueSession = null;
       QueueSender queueSender = null;
       TextMessage message = null;

       try
       {
         connectionFactory = new MQQueueConnectionFactory();
         connectionFactory.setHostName(<MQ SERVER IP>);
         connectionFactory.setPort(1500);
         connectionFactory.setTransportType(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
         connectionFactory.setQueueManager("MYQM");
         connectionFactory.setChannel("MY_SVRCONN");   
         queueConn = connectionFactory.createQueueConnection("abc","password");
         queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
         queueSender = queueSession.createSender(queueSession.createQueue("Q"));   
         queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);   
         message = queueSession.createTextMessage(msg);
         queueSender.send(message);
         queueConn.close();
       }
       catch (Exception je)
       {
           je.printStackTrace();
       }
   }   
  }

我试过 WebSphere 7, configuring JMS Q connection factory without user id: MQRC_NOT_AUTHORIZED ,但我的问题仍然存在。我没有明白我做错了什么。感谢您的帮助。

编辑

用户 abc 不属于 mqm 组

最佳答案

你给svrconn channel 的用户设置chlauth( channel 认证)了吗? channel 身份验证是从 MQ 7.1 开始新增的。密码验证仅适用于 MQ 8。基本上,您需要在 qmgr svrconn channel 上允许来自您的客户端 IP 的远程连接。

在mqsc控制台试试 SET CHLAUTH(MY_SVRCONN) TYPE(ADDRESSMAP) ADDRESS(客户端机器的ip) USERSRC(CHANNEL)

如果这不起作用,请检查 qmgr 日志。它应该准确说明导致 2035 的原因。 在这里可以找到很好的技术说明 http://www-01.ibm.com/support/docview.wss?uid=swg21577137 Morag 非常有用的博客 https://www.ibm.com/developerworks/community/blogs/aimsupport/entry/blocked_by_chlauth_why?lang=en

关于java - 尝试访问 IBM MQ 中的队列时出现 DetailedJMSSecurityException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26827487/

相关文章:

javax.jms.ResourceAllocationException : MQJMS2008 error when injecting 512th message

c# - .Net 中的 JMS 等价物

java - 验证 Json 请求架构

java - 如何访问其他方法中定义的变量

java - 具有多个 p 的行选择 :dataTable

java - 路径更改时 Servlet init 失败?

java - 如何将java泛型从一个方法应用到同一个类中的一个字段

java - Websphere MQ 7.0 + jar 与 5.3 和 6.0 MQSeries 服务器兼容吗?

java - MQ EBCDIC 数据转换 (25) 解释为换行并转换为 15 时出现问题

java - 使用 JMS 使用用户名但不使用密码访问 IBM MQ 8