gpt4 book ai didi

java - Spring JmsTemplate + 安全

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:40:54 25 4
gpt4 key购买 nike

我刚刚重构了一些发布到 JMS 主题的代码以使用 Spring 的 JmsTemplate 类,现在我收到一个异常,指出我未通过身份验证。

之前我创建了工厂,建立了连接,然后是 session 等,如下所示:

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

最佳答案

这里有几个选项...

  • 您之前设置的属性导致 channel 以管理员身份运行。要获得相同的功能,您可以将 channel 的 MCAUSER 设置为运行 QMgr 的任何 ID(对于 UNIX 通常为 mqm,在 Windows 上为 MUSR_MQADMIN)。繁荣。完毕。 Bob 是你的叔叔。
  • 是的,这确实意味着连接到该 channel 的任何人都是管理员。另一方面,这并不比以前更糟,正如您以前的代码按其方式工作所证明的那样。
  • 您仍然可以使用 Spring 并按照 this forum post 中的描述传入 ID 和密码。 .请记住,实际上并未检查密码。除非您使用 channel 导出对其进行验证,否则您传入的任何 ID 都会按面值接受。

有关客户端连接的 WMQ 安全性的更多信息,请参阅 Hardening WebSphere MQ presentation .如果您想真正保护对 QMgr 的访问,您需要将 MCAUSER 设置为低权限用户 ID,执行 setmqaut 命令以授权该 ID 的组,然后锁定所有其他 channel ,如 SYSTEM.AUTO.* 和 SYSTEM。 DEF.* 所以他们无法运行。

关于java - Spring JmsTemplate + 安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3196966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com