【问题标题】:Getting authentication error while trying to run my JMS-MQ program尝试运行我的 JMS-MQ 程序时出现身份验证错误
【发布时间】:2019-10-03 04:10:40
【问题描述】:

我以前曾在独立应用程序中运行类似的代码,但现在使用 MQ 版本 8 时会出现异常。 出现错误

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013:...
Cause by 
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').

我已经尝试通过给出以下命令来禁用 CHLAUTH

       :
ALTER QMGR CHLAUTH (DISABLED)

  1 : ALTER QMGR CHLAUTH (DISABLED)

AMQ8005: WebSphere MQ queue manager changed.

       :
          MQQueueConnectionFactory cf = new MQQueueConnectionFactory();

          // Config
          cf.setHostName("localhost");
          cf.setPort(1414);
          cf.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);
          cf.setQueueManager("QM_TEST");    
          cf.setChannel("DEV.APP.SVRCONN");

          MQQueueConnection connection = (MQQueueConnection) 
                  cf.createQueueConnection();

          MQQueueSession session = (MQQueueSession) 
                  connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
          MQQueue queue = (MQQueue) 
                  session.createQueue("queue:///Q1");
          MQQueueSender sender =  (MQQueueSender)                        
                  session.createSender(queue);
          MQQueueReceiver receiver = (MQQueueReceiver) 
                  session.createReceiver(queue);      

          long uniqueNumber = System.currentTimeMillis() % 1000;
          JMSTextMessage message = (JMSTextMessage) 
                  session.createTextMessage("Client Message "+ uniqueNumber);     

          // Start the connection
          connection.start();

          sender.send(message);
          System.out.println("Sent message:\\n" + message);

          JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
          System.out.println("\\nReceived message:\\n" + receivedMessage);

          sender.close();
          receiver.close();
          session.close();
          connection.close();

即使在如前所述禁用 CHLAUTH 之后,我也遇到了异常

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'QM_TEST' with connection mode 'Client' and host name 'localhost(1414)'.
Please check if the supplied username and password are correct on the QueueManager to which you are connecting.
    at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:531)
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:215)
    at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:424)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8475)
    at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7815)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl._createConnection(JmsConnectionFactoryImpl.java:303)
    at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:236)
    at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6016)
    at com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:111)
    at com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:187)
    at SimplePointToPoint.main(SimplePointToPoint.java:31)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
    at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
    ... 9 more

添加AMGERR01.LOG日志文件内容

----- amqxfdcp.c : 868 --------------------------------------------------------
10/1/2019 23:07:44 - Process(3172.4) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6119: An internal WebSphere MQ error has occurred ()

EXPLANATION:
MQ detected an unexpected error when calling the operating system. The MQ error
recording routine has been called.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 829 --------------------------------------------------------
10/1/2019 23:07:44 - Process(3172.4) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager QM_TEST.

EXPLANATION:
An error has been detected, and the WebSphere MQ error recording routine has
been called. The failing process is process 3172.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 868 --------------------------------------------------------
10/2/2019 00:13:25 - Process(6536.5) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6125: An internal WebSphere MQ error has occurred.

EXPLANATION:
An internal error has occurred with identifier 20806248.  This message is
issued in association with other messages.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 829 --------------------------------------------------------
10/2/2019 00:13:25 - Process(6536.5) User(MUSR_MQADMIN) Program(amqzmur0.exe)
                      Host(MYNEW-PC) Installation(Installation1)
                      VRMF(8.0.0.5)
AMQ6184: An internal WebSphere MQ error has occurred on queue manager QM_TEST1.

EXPLANATION:
An error has been detected, and the WebSphere MQ error recording routine has
been called. The failing process is process 6536.
ACTION:
Use the standard facilities supplied with your system to record the problem
identifier and to save any generated output files. Use either the MQ Support
site: http://www.ibm.com/software/integration/wmq/support/, or IBM Support
Assistant (ISA): http://www.ibm.com/software/support/isa/, to see whether a
solution is already available.  If you are unable to find a match, contact your
IBM support center.  Do not discard these files until the problem has been
resolved. 
----- amqxfdcp.c : 868 --------------------------------------------------------

【问题讨论】:

  • 队列管理器使用的是什么版本的mq8?要查找具体原因,您需要查看队列管理器的AMQERR01.LOG 日志文件。您在哪个用户下运行 java 程序,默认情况下,我相信新的 mq v8 队列管理器要求 mq 管理员用户向队列管理器发送有效的用户 ID 和密码。
  • IBM Websphere MQ Version: 8.0.0.5 ,我在上面的问题中添加了AMGERR01.LOG日志文件内容
  • 需要查看qmgrs\QM_TEST\errors文件夹中的AMQERR01.LOG
  • 感谢您的指点。问题是队列管理器需要用户 ID n 密码。这是我的个人电脑,我没有设置密码所以我将SYSTEM.DEFAULT.AUTHINFO.IDPWOS CHCKCLNT 设置为NONE 并且成功了。不知道为什么让它OPTIONAL 不起作用。现在去检查一下
  • 将其设为 OPTIONAL 不起作用,因为在默认情况下,JMS 会在没有密码的情况下发送用户。

标签: java jms ibm-mq


【解决方案1】:

以下是作为客户端连接到 MQ 服务器的两种方式。

1) 下面的客户端调用创建一个具有默认用户身份的队列连接。

      public QueueConnection createQueueConnection( ) throws JMSException

2) 下面的客户端调用创建一个具有默认用户身份的队列连接。

    public QueueConnection createQueueConnection( String userid,String password) throws JMSException

由于您使用了第一种方法,看起来默认系统用户 ID 正在发送到 MQ 服务器,并且由于您将 CHCKCLNT 设置为 OPTIONAL,因此队列管理器正在检查正确的用户名/密码对。结果,您获得了 MQRC 2035。因此,您可以通过将 CHCKCLNT 的值更新为 NONE 来禁用队列管理器正在执行的验证来解决问题。

找到 createQueueConnection 方法的链接 => https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.1.0/com.ibm.mq.javadoc.doc/WMQJMSClasses/com/ibm/mq/jms/MQQueueConnectionFactory.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-06
    • 2021-05-24
    • 1970-01-01
    • 2019-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多