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

标签 java authentication jms ibm-mq

我尝试使用 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 以只读用户查看队列,并且在修改参数,没有这样的 QMGR 运行,只是为了确保问题与 USERID 和 PASSWORD 有关。 我的示例与另一个队列配合得很好,我必须在其中使用 UserID + 密码身份验证。

现在,设置团队为我提供了一个技术用户用户 ID,但没有密码,因为不需要密码。

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 与无密码用户连接吗?

update#1:我尝试将密码设置为空或不设置字符串属性 WMQConstants.PASSWORD。

最佳答案

在您的代码中,您已将属性 WMQConstants.USER_AUTHENTICATION_MQCSP 设置为 true。这告诉您的 Java 客户端您想要使用 v8 中添加的连接身份验证功能来提供用户 ID 和密码进行身份验证。

如果您想使用旧机制仅提供用户 ID,则需要将其设置为 false。例如:

cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);

这称为兼容模式,适用于尝试连接到 IBM MQ(例如 MQ Explorer)的 Java 应用程序

引用:https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.sec.doc/q118680_.htm

关于java - 使用 JMS 使用用户名但不使用密码访问 IBM MQ 8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54199479/

相关文章:

java - JSF 2 - 从二进制数据生成图像

java - 多点触控跨平台 java 应用程序(Windows、Mac 和 Linux(Ubuntu)(可能是 Android))

jvm - 带有 jar 的可移植 JVM

java - 无法在 WIldfly 11 上向队列发送消息

jms - Stomp 选择器条件

java - Ubuntu DEB 安装程序使所有 Java 应用程序具有相同的图标

facebook - 让身份验证对话框不再那么令人生畏

ruby-on-rails - 设计两种不同型号的单独 checkout

mysql - 如何解决错误 500-[object SequelizeInstance :users] mysql Authentication

java - Windows 2012 Server 用户锁定时 Camel 停止消费