为了账号安全,请及时绑定邮箱和手机立即绑定

IBM MQ 和 Spring Integration - 安全设置

IBM MQ 和 Spring Integration - 安全设置

当年话下 2023-08-16 17:46:53
我有一个 Spring Integration 流程,它使用入站网关从 IBM MQ 队列获取消息:<int-jms:inbound-gateway id="InputGateway"      request-destination="RequestQueue"            request-channel="RequestChannel"          reply-channel="ReplyChannel"               />但是我无法分配安全设置。特别是,我需要用户名、密码和 userAuthenticationMQCSP = false(出于超出本文范围的原因,我不会详细说明,但我的经纪人将抛出 MQRC = 2009 否则)。我已按照IBM 指南连接 jmsTemplate并且工作正常。这使用 IBM MQ 的官方Spring boot starter,它将创建一个连接工厂,并使用 application.properties 中的一些默认值自动配置它:ibm.mq.queueManager=myQMName ibm.mq.channel=myChannel ibm.mq.connName=myhostname(myPort) ibm.mq.user=username ibm.mq.password=******* ibm.mq.userAuthenticationMQCSP=false现在,回到 Spring Integration 案例。根据int-jms:inbound-gateway 规范,连接工厂将按名称(属性:连接工厂)注入到网关,默认设置为&ldquo;jmsConnectionFactory&rdquo;默认情况下,所有需要引用 ConnectionFactory 的 JMS 适配器都会自动查找名为 jmsConnectionFactory 的 bean。这就是为什么您在许多示例中看不到连接工厂属性的原因。但是,如果您的 JMS ConnectionFactory 有不同的 bean 名称,则需要提供该属性。我没有看到任何方法来为可以插入 int-jms:inbound-gateway 的连接工厂设置可预测的名称。现在,采用不同的方法,根据此示例,我使用适当的名称创建了连接工厂:<bean id="jmsConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">      <property name="transportType" value="1"/>      <property name="queueManager" value="myQMName"/>      <property name="hostName" value="myhostname"/>      <property name="port" value="myPort" />      <property name="channel" value="myChannel"/> </bean>但现在我需要在某个地方放置凭据和安全参数。看看上面的例子,看起来我需要插入类似的东西:<bean id="secureJmsConnectionAdapter" class="**yourpackages.SecureJMSConnectionAdapter**">     <property name="targetConnectionFactory" ref="${jms.mq.connection.factory}" />     <property name="userName" value="${jms.username}"/>     <property name="pwdAlias" value="${jms.alias}"/> </bean>但是我不清楚如何实现这个 SecureJMSConnectionAdapter。此外,如果我设置自己的连接工厂,由于MQAutoConfiguration 类上的此注释,我将丢失所有 MQ boot starter automagic :@ConditionalOnMissingBean(value=javax.jms.ConnectionFactory.class)关于如何将这些部分组合在一起有什么想法吗?编辑:为了避免对任何人造成任何可能的干扰,MQRC2009 与 ibm.mq.userAuthenticationMQCSP=false 无关。
查看完整描述

1 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

我的一些旧项目使用了这样的 bean:

<bean id="jmsQueueConnectionFactory"
      class="org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter">
    <property name="targetConnectionFactory" ref="jmsConnectionFactory"/>
    <property name="username" value="${jms.username}"/>
    <property name="password" value="${jms.alias}"/>
</bean>

应该可以很好地作为您的包装器com.ibm.mq.jms.MQQueueConnectionFactory,但您必须jmsQueueConnectionFactory在目标组件中使用它。

尽管看起来前面提到的IBM MQ JMS Spring并不能帮助我们正确公开jmsConnectionFactorybean。在这种情况下,您可以依赖 Spring Integration 的默认值,或者jmsConnectionFactory显式地将其用于connection-factory.

查看完整回答
反对 回复 2023-08-16
  • 1 回答
  • 0 关注
  • 305 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号