我尝试使用IBM JMS示例代码连接到新的MQ设置进行测试:
https://developer.ibm.com/messaging/learn-mq/mq-tutorials/develop-mq-jms/
private static final String HOST = "MYIP"; // Host name or IP address
private static final int PORT = MYPORT; // Listener port for your queue manager
private static final String CHANNEL = "MY.APP.SVRCONN"; // Channel name
private static final String QMGR = "MYQMGR"; // Queue manager name
private static final String APP_USER = "MYUSER"; // User name that application uses to connect to MQ
private static final String APP_PASSWORD = ""; // Password that the application uses to connect to MQ
private static final String QUEUE_NAME = "MYQUEUE"; // Queue that the application uses to put and get messages to an
和
// Set the properties
cf.setStringProperty(WMQConstants.WMQ_HOST_NAME, HOST);
cf.setIntProperty(WMQConstants.WMQ_PORT, PORT);
cf.setStringProperty(WMQConstants.WMQ_CHANNEL, CHANNEL);
cf.setIntProperty(WMQConstants.WMQ_CONNECTION_MODE, WMQConstants.WMQ_CM_CLIENT);
cf.setStringProperty(WMQConstants.WMQ_QUEUE_MANAGER, QMGR);
cf.setStringProperty(WMQConstants.WMQ_APPLICATIONNAME, "JmsPutGet (JMS)");
cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
cf.setStringProperty(WMQConstants.USERID, APP_USER);
cf.setStringProperty(WMQConstants.PASSWORD, APP_PASSWORD);
假定提供和使用的所有参数都是正确的(HOST,PORT,CHANNEL,QMGR,QUEUE_NAME),因为我可以连接到管理器,并使用MQ Explorer以只读用户的身份查看队列,并且在修改参数,以确保没有问题与USERID和PASSWORD有关。 我的示例在另一个队列中工作得很好,在该队列中,我必须使用UserID +密码身份验证。
现在,安装团队为我提供了一个技术用户用户名,但没有密码,因为不需要。
Exception in thread "main" com.ibm.msg.client.jms.DetailedJMSSecurityRuntimeException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'MYQUEUEMANAGER' with connection mode 'Client' and host name 'MYIP(MYPORT)'.
Please check if the supplied username and password are correct on the QueueManager to which you are connecting.
at com.ibm.msg.client.jms.DetailedJMSSecurityException.getUnchecked(DetailedJMSSecurityException.java:270)
at com.ibm.msg.client.jms.internal.JmsErrorUtils.convertJMSException(JmsErrorUtils.java:173)
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createContext(JmsConnectionFactoryImpl.java:478)
at com.ibm.mq.samples.jms.JmsTestClient.main(JmsTestClient.java:78)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
有人可以指导我进行正确的配置,或者将其设置为通过JMS与无密码用户连接的参数吗?
更新#1:我试图将密码设置为空或不设置字符串属性WMQConstants.PASSWORD的原因。
答案 0 :(得分:1)
对于无密码身份验证(仅用户ID),请使用:
cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);
不幸的是,我们的MQ团队存在配置错误,我再也没有尝试过此选项。 IBM文档有些守口如瓶。 https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.javadoc.doc/WMQJMSClasses/com/ibm/msg/client/jms/JmsConstants.html#USER_AUTHENTICATION_MQCSP
答案 1 :(得分:1)
在代码中,您已将属性WMQConstants.USER_AUTHENTICATION_MQCSP
设置为true
。这告诉您的Java客户端您想使用v8中添加的“连接身份验证”功能来提供用于身份验证的用户ID和密码。
如果要使用旧机制仅提供用户ID,则需要将其设置为false。例如:
cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);
这称为兼容模式,适用于尝试连接到IBM MQ的Java应用程序(例如MQ Explorer)
参考:https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.sec.doc/q118680_.htm