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

SpringJMS 3.0.4不使用用户名连接MQ 7.5连接

汪同
2023-03-14

下面是我们正在使用的配置,但我们得到如下所示的错误消息

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jms="http://www.springframework.org/schema/jms" xmlns:p="http://www.springframework.org/schema/p"  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd         http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-3.0.xsd">

<!-- :: Messaging Infrastructure Beans :: -->

<bean id="transport" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean" p:staticField="com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP" />

  <bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory" p:transportType-ref="transport"
  p:queueManager="${tcs.messaging.queueManager.name}" p:hostName="${tcs.messaging.queueManager.host}" p:port="${tcs.messaging.queueManager.port}"
  p:channel="${tcs.messaging.queueManager.channel}" />

<bean id="queueConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory"
  p:targetConnectionFactory-ref="mqConnectionFactory" p:sessionCacheSize="${tcs.messaging.connectionFactory.sessionCacheSize}"
  p:exceptionListener-ref="providerMessageListener" />

<bean id="providerMessageListener" class="com.uhg.treasury.customerservice.management.transport.jms.ProviderExceptionListener" />

<!-- New Addition ::   -->
   <bean id="myConnectionFactory2" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
      <property name="targetConnectionFactory"> <ref bean ="mqConnectionFactory"/> </property>
     <property name="username"> <value>"tbossmqd"</value> </property>
     <property name="password"> <value>"password1"</value> </property>
  </bean>

</beans>

错误信息如下所示

2014-06-27 11:25:42,503[main]debug-defaultMessageListenerContainer.InstructionSharedConnection(752)无法建立共享JMS连接-让异步调用程序尽快建立连接com.ibm.msg.client.JMS.detailedJMSSecurityException:JMSWMQ2013:为QueueManager“WMQT013”提供的安全身份验证无效,该身份验证的连接模式为“Client”,主机名为“WMQLT0006.xxx.com(1960)”。请检查您正在连接的QueueManager上提供的用户名和密码是否正确。com.ibm.msg.client.wmq.common.internal.reason.reasontoException(reas.java:521)在com.ibm.msg.client.wmq.internal.createException(reas.java:221)在com.ibm.msg.client.wmq.internal.wmqConnection.java:426)在ProviderConnection(WMQConnectionFactory.java:6277)在com.ibm.msg.client.jms.admin.jmsConnectionFactoryImpl.createConnection(JMSConnectionFactory.java:285)在com.ibm.mq.jms.mqConnectionFactory.createConnection(MQConnectionFactory.java:6233)在com.ibm.mq.jms.mqQueueConnectionFactory.java:6233)在在org.springframework.jms.connection.SingleConnectionFactory.docreateConnection(SingleConnectionFactory.java:342)在org.springframewinitConnection(singleConnectionFactory.java:288)在org.springframework.jms.connection.singleConnectionFactory.createConnection(singleConnectionFactory.java:225)在org.springframework.jms.support.jms.support.jmsAccessor.createConnection(jmsAccessor.java:184)在AbstractJMSListeningContainer.java:371)在org.springframework.jms.listener.defaultMessageListenerContainer.Instruction SharedConnection(DefaultMessageListenerContainer.java:749)在org.springframework.jms.listener.AbstractJMSListeningContainer.doStart(AbstractJMSListeningContainer.java:278)在gelistenerContainer.java:555)在org.springframework.context.support.defaultLifecycleProcessor.dostart(DefaultLifecycleProcessor.java:166)在org.springframework.context.support.defaultLifecycleProcessor.access$1(DefaultLifecycleProcessor.java:154)在org.springframework.context.support.defaultLifecycleProcessor.java:154)在在org.springframework.context.support.AbstractApplicationContext.FinishRefresh(AbstractApplicationContext.java:908)在org.springframework.context.support.AbstractApplicationContext.Refresh(AbstractApplicationContext.java:428)在org.springframework.context.support.ClasspathXmlApplicationContext.Refresh(AbstractApplicationContext.java:197)在ext.(classpathXmlApplicationContext.java:172)在org.springframework.context.support.classpathXmlApplicationContext.(classpathXmlApplicationContext.java:158)在com.uhg.treasury.customerService.management.server(server.java:61)在com.uh.treasury.customerService.management.server(server.java:43)在在com.ibm.msg.client.wmq.common.internal.reason.createException(reason.java:209)...29更多2014-06-27 11:25:42,512[main]debug-abstractJMSListeningContainer.resumepausedTasks(539)恢复暂停的任务:org.springframework.jms.listener.defaultMessager$AsyncMessageListenerContainer@627a94a9 11:25:42,512[main]ElistenerContainer$AsyncMessageListenerInvoker@5db615c1

共有1个答案

史景铄
2023-03-14

我可以确认Spring调用的MQQueueUConnectionFactory.createConnection方法是不传递用户名/密码的版本。这就是为什么您看到MQRC_NOT_AUTHORIZED是因为用户名没有传递给队列管理器。

我不是spring专家,但我认为您添加的新myConnectionFactory2 bean需要引用您的CachingConnectionFactory bean(queueConnectionFactory),而不是直接引用MQQueueConnectionFactory bean(mqConnectionFactory)。所以改变这个:

<bean id="myConnectionFactory2" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
      <property name="targetConnectionFactory"> <ref bean ="mqConnectionFactory"/> </property>
     <property name="username"> <value>"tbossmqd"</value> </property>
     <property name="password"> <value>"password1"</value> </property>
  </bean>

变成这样:

<bean id="myConnectionFactory2" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
      <property name="targetConnectionFactory"> <ref bean ="queueConnectionFactory"/> </property>
     <property name="username"> <value>"tbossmqd"</value> </property>
     <property name="password"> <value>"password1"</value> </property>
  </bean>
 类似资料:
  • 我正在用自动配置的Tomcat池数据源开发基于spring boot的应用程序。我必须在不同的DB模式下调用相同的Oracle存储过程(它们都有执行授权),而且我事先没有指定的用户/密码列表。但在程序调用的时候我知道凭据。我使用dataSource对象的getConnection(user,password)方法来接收连接并且工作良好。但是,如果我一个一个地调用过程三次--对于用户A,用户B,再一

  • 问题内容: 我用NodeJS,socketIO和Express中的不同聊天室制作了一个聊天客户端。我正在尝试显示每个房间的已连接用户的更新列表。 有没有一种方法可以将用户名连接到对象,以便在执行操作时可以看到所有用户名: 然后执行以下操作: 我还可以通过其他方式做到这一点? 解决: 这有点重复,但是解决方案在任何地方都不很清楚地写出来,所以我想我会在这里写下来。这是的解决方案后由安迪轩至极被回答。

  • 另一个宽大处理--B: 这里要注意,实体A和B之间没有隐式关系,B表中的a_id是手工处理的,因此--关系类似于一对多(A-->B),但不是jpa-hibernate关系。而且,我的FullDto有A的所有属性和B的列表: 现在,我想从A的存储库接口中提取所有内容(A和B表一次完成),如下所示:

  • Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置

  • 本文向大家介绍sqlalchemy 使用连接,包括了sqlalchemy 使用连接的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用上下文管理器打开连接(即从池中请求一个连接): 有无,但必须手动将其关闭: