При отправке в MQ из java всегда используется установленный по умолчанию идентификатор пользователя mqm для IBM MQ версии 6.0.

Наш код работает в weblogic, и мы MQ 6.0. Независимо от того, использую ли я значение по умолчанию createQueueConnection() или createQueueConnection("myuserid","mypassword"), всегда используется идентификатор пользователя mqm. См. Код ниже.

Когда я подключаюсь из версии 6.0 к более ранней установке mq 5, кажется, выдает следующую ошибку javax.jms.JMSSecurityException: MQJMS2013: invalid security authentication supplied for MQQueueManager с использованием значения по умолчанию createQueueConnection(), если я не отправлю пустой идентификатор пользователя / пароль, как в createQueueConnection("","")

Как я могу получить вместо этого myuserid?

Hashtable properties = new Hashtable(2);
properties.put(Context.PROVIDER_URL,context);
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");

InitialContext ctx = new InitialContext(properties);
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("QCF");
QueueConnection qc = qcf.createQueueConnection();
javax.jms.Queue q = (javax.jms.Queue) ctx.lookup("MYQUEUE");
QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
TextMessage tm = qs.createTextMessage();
tm.setText(outString);
QueueSender sender = qs.createSender(q);
sender.send(tm);
sender.close();
qs.close();
qc.close();

person mrjohn    schedule 23.09.2010    source источник


Ответы (1)


Если вы устанавливаете идентификатор в createQueueConnection, будьте уверены, он предоставляется администратору очередей. Проблема, которую вы видите, заключается в том, что определение канала SVRCONN в QMgr имеет жестко закодированное значение MCAUSER ('mqm'). Это отменяет любое значение, представленное клиентским приложением.

Здесь нужно отметить пару моментов.

  1. Хотя вы можете отправить идентификатор и пароль, WMQ принимает их по номинальной стоимости. Поля существуют, чтобы сделать учетные данные доступными для выхода канала, который может их проверить. Без такого выхода канал просто будет работать с любым идентификатором, заявленным приложением, а пароль игнорируется.
  2. По указанной выше причине я всегда говорю людям не доверять представленным учетным данным, если у них нет такого выхода. Администратор должен ввести соответствующее значение в MCAUSER.
  3. Административный идентификатор («mqm» в версиях UNIX) НЕ является подходящим значением. Он предоставляет административные полномочия любому, кто подключается к этому каналу.

Для получения более подробной информации по этой теме и указателей на презентацию по безопасности WMQ и руководство лаборатории безопасности WMQ от IMPACT см. этот ТАК вопрос.

person T.Rob    schedule 24.09.2010
comment
Thnaks T.Rob за разъяснения. Также я вижу разницу при подключении java-jar-файлов MQ6 к установке MQ5. Кажется, он не совместим на 100%, поскольку в этом случае идентификатор пользователя не перезаписывается. Но передача пустой строки в качестве идентификатора пользователя / пароля, похоже, работает, поскольку в этом сценарии идентификатор пользователя mqm по умолчанию используется QMgr. - person mrjohn; 24.09.2010
comment
Я должен был упомянуть, что WMQ 5.x уже довольно давно не поддерживается, а WMQ v6 не поддерживается с сентября 2011 года. Если это вообще возможно, переходите на v7 как на клиенте, так и на QMgr. Обычно я бы сказал, что вы можете использовать более позднюю версию клиента, чем на QMgr, и сначала обновить ее, если вам нужно, но клиент v7 не был протестирован с v5 QMgr AKAIK, поэтому просто обновите все, если это будет производственная система и вы хотите иметь возможность открывать против него IBM PMR. - person T.Rob; 24.09.2010