4

Spring の JmsTemplate クラスを使用するように JMS トピックに公開されたコードをリファクタリングしたところ、認証されていないことを示す例外が発生しました。

以前は、ファクトリを作成し、接続を作成してから、次のようにセッションなどを行いました。

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>

また、jmsFactory をUserCredentialsConnectionFactoryAdapterオブジェクトにラップしようとしましたが、役に立ちませんでした。

<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
4

2 に答える 2

2

ここでいくつかのオプション...

  • 以前に設定したプロパティにより、チャネルが管理者として実行されました。同じ機能を得るために、チャネルの MCAUSER を、QMgr が実行されている任意の ID に設定できます (通常、UNIX では mqm、Windows では MUSR_MQADMIN)。ブーム。終わり。ボブの叔父。
  • はい、これは、そのチャネルに接続しているすべての人が管理者であることを意味します。一方、以前のコードがそのように動作していたことからわかるように、これは以前よりも悪くありません。
  • このフォーラムの投稿で説明されているように、引き続き Spring を使用して ID とパスワードを渡すことができます。パスワードは実際にはチェックされないことに注意してください。チャネル出口を使用して検証しない限り、渡した ID は額面通りに受け入れられます。

クライアント接続を介した WMQ セキュリティの詳細については、Hardening WebSphere MQ プレゼンテーションを参照してください。QMgr へのアクセスを実際に保護したい場合は、MCAUSER を権限の低いユーザー ID に設定し、setmqaut コマンドを実行してその ID のグループを承認し、SYSTEM.AUTO.* や SYSTEM などの他のすべてのチャネルをロックダウンします。 DEF.* なので実行できませんでした。

于 2010-07-08T04:39:12.357 に答える
0

ローカルの Windows マシンで Websphere を実行し、Unix マシンの MQ サーバーに接続しています。私にとっては、3番目のオプションのみが機能しました。コンソールからのユーザー ID の設定が機能しませんでした。mqm と MUSR_MQADMIN の両方を試しました。

//ユーザー名とパスワードを使用して作成された接続 QueueConnection connection = factory.createQueueConnection("mqm","mqm");

于 2012-01-10T20:48:03.247 に答える