Authentication SpringJMS 3.0.4未使用用户名连接MQ 7.5连接
SpringJMS 3.0.4未使用用户名连接MQ 7.5连接 无法使用用户名连接SpringJMS版本3.0.4中的MQ 7.5队列管理器。传递用户名以向队列提供适当的授权。我们正在使用SpringJMS,它使用同一台机器上可用的MQ客户端库。MQ管理器/服务器位于远程计算机上 下面是我们正在使用的配置,但我们收到的错误消息如下所示Authentication SpringJMS 3.0.4未使用用户名连接MQ 7.5连接,authentication,mq,spring-jms,Authentication,Mq,Spring Jms,SpringJMS 3.0.4未使用用户名连接MQ 7.5连接 无法使用用户名连接SpringJMS版本3.0.4中的MQ 7.5队列管理器。传递用户名以向队列提供适当的授权。我们正在使用SpringJMS,它使用同一台机器上可用的MQ客户端库。MQ管理器/服务器位于远程计算机上 下面是我们正在使用的配置,但我们收到的错误消息如下所示 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springfr
<?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>
“tbossmqd”
“密码1”
错误消息如下所示
2014-06-27 11:25:42503[main]调试-DefaultMessageListenerContainer.establishSharedConnection(752)|无法建立共享JMS连接-让异步调用程序尽快建立连接
com.ibm.msg.client.jms.DetailedJMSSecurityException:JMSWMQ2013:为连接模式为“client”且主机名为“wmqlt006.xxx.com(1960)”的队列管理器“WMQT013”提供的安全身份验证无效。
请检查所连接的QueueManager上提供的用户名和密码是否正确。
位于com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:521)
位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:221)
位于com.ibm.msg.client.wmq.internal.WMQConnection.(WMQConnection.java:426)
位于com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:6902)
位于com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:6277)
位于com.ibm.msg.client.jms.admin.jmsconnectionfactorympl.createConnection(jmsconnectionfactorympl.java:285)
位于com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6233)
位于com.ibm.mq.jms.MQQueueConnectionFactory.createQueueConnection(MQQueueConnectionFactory.java:120)
位于com.ibm.mq.jms.MQQueueConnectionFactory.createConnection(MQQueueConnectionFactory.java:203)
位于org.springframework.jms.connection.SingleConnectionFactory.doCreateConnection(SingleConnectionFactory.java:342)
位于org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:288)
位于org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:225)
位于org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184)
位于org.springframework.jms.listener.AbstractJmsListeningContainer.createSharedConnection(AbstractJmsListeningContainer.java:403)
位于org.springframework.jms.listener.AbstractJmsListeningContainer.establishSharedConnection(AbstractJmsListeningContainer.java:371)
位于org.springframework.jms.listener.DefaultMessageListenerContainer.establishSharedConnection(DefaultMessageListenerContainer.java:749)
位于org.springframework.jms.listener.AbstractJmsListeningContainer.doStart(AbstractJmsListeningContainer.java:278)
位于org.springframework.jms.listener.AbstractJmsListeningContainer.start(AbstractJmsListeningContainer.java:263)
位于org.springframework.jms.listener.DefaultMessageListenerContainer.start(DefaultMessageListenerContainer.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$LifecycleGroup.start(DefaultLifecycleProcessor.java:335)
位于org.springframework.context.support.DefaultLifecycleProcessor.startBeans(DefaultLifecycleProcessor.java:143)
位于org.springframework.context.support.DefaultLifecycleProcessor.onRefresh(DefaultLifecycleProcessor.java:108)
位于org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:908)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:428)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:197)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:172)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:158)
位于com.uhg.treasury.customerservice.management.Server.(Server.java:61)
位于com.uhg.treasury.customerservice.management.Server.(Server.java:43)
原因:com.ibm.mq.MQException:JMSCMQ0001:WebSphere mq调用失败,代码为“2”(“MQCC_失败”)原因为“2035”(“MQRC_未授权”)。
位于com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:209)
... 还有29个
2014-06-27 11:25:42512[main]调试-AbstractJMSListingContainer.resumePausedTasks(539)|恢复暂停的任务:org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@627a94a9
2014-06-27 11:25:42512[main]调试-AbstractJMSListingContainer.resumePausedTasks(539)|恢复暂停的任务:org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker@5db615c1我可以确认Spring调用的
MQQueueuConnectionFactory.createConnection
方法是不传递用户名/密码的版本。这就是为什么您会看到MQRC_未经授权,因为用户名未传递给队列管理器
我不是spring专家,但我相信您添加的新myConnectionFactory2 bean需要引用您的CachingConnectionFactorybean(queueConnectionFactory),而不是直接引用MQQueueConnectionFactorybean(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>
“tbossmqd”
“密码1”
为此:
<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>
“tbossmqd”