当前位置: 首页 > 知识库问答 >
问题:

DetailedJMSSecurityException同时尝试访问IBMMQ中的队列

乔丁雨
2023-03-14

这是我的问题。

我正在使用试用版的IBMMQ V7.1。我已经创建了一个队列管理器MYQM,一个带有MCA用户ID abc的通道MY_SVRCONN。我已经提供了用户abc来访问MYQM。我正在尝试将消息放入队列Q1。但是在获取队列连接时,我遇到了异常。

com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013:为具有连接模式“客户端”和主机名“(1500)”的QueueManager“MYQM”提供的安全身份验证无效。请检查您正在连接的QueueManager上提供的用户名和密码是否正确。

我使用以下命令允许用户abc访问MYQM

[mqm@localhost ~]$ setmqaut -m MYQM -t qmgr -p abc +connect
The setmqaut command completed successfully.

这是我的Java程序

 public class MqPut
 {
     public static void main(String[] args)
     {
      sendMsg("Sample Message");
     }
     public static void sendMsg(String msg)
     {
       MQQueueConnectionFactory connectionFactory = null;
       QueueConnection queueConn = null;
       QueueSession queueSession = null;
       QueueSender queueSender = null;
       TextMessage message = null;

       try
       {
         connectionFactory = new MQQueueConnectionFactory();
         connectionFactory.setHostName(<MQ SERVER IP>);
         connectionFactory.setPort(1500);
         connectionFactory.setTransportType(WMQConstants.WMQ_CLIENT_NONJMS_MQ);
         connectionFactory.setQueueManager("MYQM");
         connectionFactory.setChannel("MY_SVRCONN");   
         queueConn = connectionFactory.createQueueConnection("abc","password");
         queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
         queueSender = queueSession.createSender(queueSession.createQueue("Q"));   
         queueSender.setDeliveryMode(DeliveryMode.NON_PERSISTENT);   
         message = queueSession.createTextMessage(msg);
         queueSender.send(message);
         queueConn.close();
       }
       catch (Exception je)
       {
           je.printStackTrace();
       }
   }   
  }

我曾尝试使用WebSphere 7,在没有用户id的情况下配置JMS Q连接工厂:MQRC\u NOT\u AUTHORIZED,但我的问题仍然存在。我没有弄明白我做错了什么。感谢您的帮助。

编辑

用户abc不属于mqm组

共有3个答案

微生自怡
2023-03-14

无论何时从队列管理器返回任何错误,请记住,您应该始终查看队列管理器AMQERR01。LOG以获得更详细的解释。对于任何与安全相关的错误尤其如此,因为只有一个错误代码-MQRC_NOT_AUTHORIZED(2035)-它被翻译成JMS ExceptionJMSWMQ2013-被返回到应用程序,以免将详细信息泄露给任何潜在的黑客。您必须始终查看队列管理器错误日志以获取详细信息。

穆歌者
2023-03-14

在开发环境(WMQ 8.0)中,我更喜欢修改授权,使其是可选的。

ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
REFRESH SECURITY TYPE(CONNAUTH)

(由于安全问题,不建议生产队列管理器禁用此功能。)

在WMQ 7.1中,可以将通道授权设置为禁用,但这在WMQ 8.0上似乎不起作用

ALTER QMGR CHLAUTH(DISABLED)
卜和悌
2023-03-14

您是否在svrconn通道上为用户设置了chlauth(通道身份验证)?通道身份验证是MQ 7.1之后的新功能。密码验证仅可从MQ 8获得。基本上,您需要在qmgr svrconn通道上允许来自客户端IP的远程连接。

在mqsc控制台中尝试设置CHLAUTH(MY\u SVRCONN)TYPE(ADDRESSMAP)ADDRESS(html" target="_blank">客户端机器的ip)USERSRC(通道)

如果这不起作用,请检查qmgr日志。它应该确切地说是什么导致了2035年。这里有一个很好的技术说明http://www-01.ibm.com/support/docview.wss?uid=swg21577137Morag的博客真的很有用https://www.ibm.com/developerworks/community/blogs/aimsupport/entry/blocked_by_chlauth_why?lang=en

 类似资料:
  • 我带着一个我无法解决的问题来到这里。 我在版本1.7中有一个prestashop,我已经移动到另一台服务器,值得一提的是,在旧服务器中,prestashop运行良好。 当我将prestashop迁移到新服务器时,除了我想进入后台,当我想进入后台时,只需将页面留空,其他一切都可以正常工作。 我已经激活了调试模式,但它没有给我任何与后台相关的错误,有趣的是,当调试模式被激活时,我可以毫无问题地进入后台

  • 我在写spring应用程序。我在我的项目中加入了招摇过市,但不知何故它无法正常运行。我的项目中也有带令牌的承载身份验证。请告诉我如何解决这个问题

  • 问题内容: 我遇到了一个例外,但找不到原因。 我得到的例外是: :尝试访问方法; 从B类 该方法是公开的。 我正在使用Tomcat 5.5.12和JAVA 1.6 问题答案: 几乎可以肯定,您在运行时使用的类版本与您期望的版本不同。特别是,运行时类将不同于您针对其进行编译的类(否则将导致编译时错误)-该方法曾经存在private吗?您的系统上任何地方都有类/ jar的旧版本吗? 作为状态的java

  • 拜托,我需要一些关于Prestashop问题的帮助。我在OVH共享主机上运行Prestashop 1.7。直到昨天早上,一切都很顺利,但后来我再也无法访问后台,反而出现了错误500。门脸还在工作,我还在接受订单。 资料: 我没有升级任何东西,无论是网站还是任何模块。 当我启用调试模式(define.inc.php),后台再次工作,但前台得到一个错误:前台错误。当我试图从后台重新生成. htacce

  • 我有以下功能可以将图片的较小版本合并到图片本身的较大版本: 然而,我得到了以下错误: CORS策略阻止了从源“http://localhost:53594”访问“http://xxxxxxx.com/testpicture.jpg”上的映像:请求的资源上没有“access-control-allow-origin”标头。 我使用了“匿名”交叉起源声明,应该可以解决这个问题,但它似乎没有造成任何影响

  • 下面是我的配置: 在server.xml中(来自Tomcat) 在web.xml中(来自Tomcat) 在web.xml中(来自我的项目) 和我的项目结构: 最后,看看日志,我想不出我的应用程序部署在哪里: 感谢任何帮助!