Доступ к IBM MQ 8 с использованием JMS с пользователем, но без пароля - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь подключиться к новой настройке MQ, используя пример кода IBM JMS для тестирования:

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. Мой пример отлично работает с другой очередью, где я должен использовать аутентификацию по ID пользователя + пароль.

Теперь команда установки предоставила мне технический 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?

обновление # 1: я пытался установить пароль пустым или не установить строковое свойство WMQConstants.PASSWORD причины.

Ответы [ 2 ]

0 голосов
/ 15 января 2019

В вашем коде вы установили свойство WMQConstants.USER_AUTHENTICATION_MQCSP на true. Это говорит вашему клиенту Java, что вы хотите использовать функцию аутентификации соединения, которая была добавлена ​​в v8, чтобы предоставить идентификатор пользователя и пароль для аутентификации.

Если вы хотите использовать старый механизм для предоставления только идентификатора пользователя, вам нужно установить значение false. Например:

cf.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, false);

Этот режим называется режимом совместимости и применим к приложениям Java, пытающимся подключиться к IBM MQ (например, MQ Explorer)

Ссылка: https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.sec.doc/q118680_.htm

0 голосов
/ 15 января 2019

Для аутентификации без пароля (только идентификатор пользователя) используйте:

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

...