2010-07-07 5 views
3

저는 Spring의 JmsTemplate 클래스를 사용하기 위해 JMS 토픽에 게시 된 코드를 리팩터링했지만 지금은 인증되지 않았다는 예외를받습니다.Spring JmsTemplate + Security

이전에 나는 공장을 만들어 다음과 같이 연결, 세션 등을 만든 :

MQTopicConnectionFactory factory = new MQTopicConnectionFactory(); 
factory.setQueueManager(qMgr); 
factory.setTransportType(JMSC.MQJMS_TP_CLIENT_MQ_TCPIP); 
factory.setHostName(hostname); 
factory.setPort(listenerPort); 
factory.setChannel(channel); 
// setting username and password to be empty string ==> no authentication 
connection = factory.createConnection("", ""); 
... 
connection.start(); 

내가 문자열을 비울 수있는 사용자 이름과 암호를 설정 아무 곳 JmsTemplate 내에서 표시되지 않습니다. 내 설정은 다음과 같습니다

<bean id="jmsFactory" class="com.ibm.mq.jms.MQTopicConnectionFactory"> 
    <property name="queueManager"> 
     <value>ACT01</value> 
    </property> 
    <property name="hostName"> 
     <value>xx.xx.xx.xx</value> 
    </property> 
    <property name="port"> 
     <value>15004</value> 
    </property> 
    <property name="transportType"> 
     <value>1</value> 
    </property> 
    <property name="channel"> 
     <value>CONDUCTOR.ACT01</value> 
    </property> 
</bean> 

<bean id="impactJmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory"> 
     <bean class="org.springframework.jms.connection.SingleConnectionFactory"> 
      <property name="targetConnectionFactory"> 
       <ref local="jmsFactory" /> 
      </property> 
     </bean> 
    </property> 
</bean> 

가 나는 또한 아무 소용에 UserCredentialsConnectionFactoryAdapter 객체의 jmsFactory 포장 시도 :

<bean id="jmsConnectionFactory" class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter"> 
    <property name="targetConnectionFactory" ref="jmsFactory"/> 
    <property name="username" value=""/> 
    <property name="password" value=""/> 
</bean> 

스택 추적 : 여기

Caused by: com.ibm.msg.client.jms.DetailedJMSSecurityException: JMSWMQ2013: The security authentication was not valid that was supplied for QueueManager 'LOROL' with connection mode 'Client' and host name 'xx.xx.xx.xx'. Please check if the supplied username and password are correct on the QueueManager you are connecting to 
at com.ibm.msg.client.wmq.common.internal.Reason.reasonToException(Reason.java:531) 
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:219) 
at com.ibm.msg.client.wmq.internal.WMQConnection.<init>(WMQConnection.java:410) 
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:7855) 
at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createProviderConnection(WMQConnectionFactory.java:7331) 
at com.ibm.msg.client.jms.admin.JmsConnectionFactoryImpl.createConnection(JmsConnectionFactoryImpl.java:276) 
at com.ibm.mq.jms.MQConnectionFactory.createCommonConnection(MQConnectionFactory.java:6055) 
at com.ibm.mq.jms.MQTopicConnectionFactory.createTopicConnection(MQTopicConnectionFactory.java:114) 
at com.ibm.mq.jms.MQTopicConnectionFactory.createConnection(MQTopicConnectionFactory.java:197) 
at org.springframework.jms.connection.SingleConnectionFactory.doCreateConnection(SingleConnectionFactory.java:343) 
at org.springframework.jms.connection.SingleConnectionFactory.initConnection(SingleConnectionFactory.java:290) 
at org.springframework.jms.connection.SingleConnectionFactory.createConnection(SingleConnectionFactory.java:227) 
at org.springframework.jms.support.JmsAccessor.createConnection(JmsAccessor.java:184) 
at org.springframework.jms.core.JmsTemplate.execute(JmsTemplate.java:461) 
... 25 more 
Caused by: com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED'). 
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:206) 
... 37 more 
+0

무엇이 _exact_ 예외입니까? 전체 스택 추적을 제공하십시오. – Bozho

답변

1

몇 가지 옵션을. ..

  • 속성 전에 설정 한 채널로 인해 관리자로 실행됩니다. 동일한 기능을 사용하려면 채널의 MCAUSER를 QMgr이 실행중인 ID (일반적으로 UNIX의 경우 mqm, Windows의 경우 MUSR_MQADMIN)로 설정할 수 있습니다. 팔. 끝난. 밥 삼촌.
  • 예, 해당 채널에 연결하는 모든 사람이 관리자임을 의미합니다. 다른 한편으로 이것은 이전 코드가 이전과 같은 방식으로 작동하는 것으로 입증 된 것보다 더 나쁘지 않습니다.
  • 여전히 스프링을 사용할 수 있으며 this forum post에서 설명한대로 ID와 비밀번호를 전달할 수 있습니다. 비밀번호는 실제로 확인되지 않습니다. 전달한 ID는 채널 종료를 사용하여 유효성을 검사하지 않는 한 액면 그대로 허용됩니다.

클라이언트 연결을 통한 WMQ 보안에 대한 자세한 내용은 Hardening WebSphere MQ presentation을 참조하십시오. QMgr에 대한 액세스를 실제로 보안하려는 경우 MCAUSER를 낮은 권한의 사용자 ID로 설정하려면 setmqaut 명령을 실행하여 해당 ID 그룹을 인증 한 다음 SYSTEM.AUTO. * 및 SYSTEM과 같은 다른 모든 채널을 잠급니다. DEF. * 그래서 그들은 달릴 수 없었다.

0

로컬 Windows 컴퓨터에서 Websphere를 실행하고 Unix 시스템의 MQ 서버에 연결합니다. 나를 위해 세 번째 옵션 만 효과가있었습니다. 콘솔에서 사용자 ID를 설정하지 못했습니다. mqm과 MUSR_MQADMIN을 모두 시도했습니다.

// 사용자 이름과 암호를 사용하여 연결이 생성되었습니다. QueueConnection connection = factory.createQueueConnection ("mqm", "mqm");

관련 문제