当前位置: 首页 > 知识库问答 >
问题:

IBM MQ和Spring集成——安全设置

鲍健柏
2023-03-14

我有一个Spring集成流,它使用入站网关从IBM MQ队列获取消息:

<int-jms:inbound-gateway id="InputGateway"  
   request-destination="RequestQueue"  
         request-channel="RequestChannel"
         reply-channel="ReplyChannel"     
         />

但是,我无法分配安全设置。特别是,我需要用户名,密码和用户身份验证MQCSP = 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集成案例。根据int-jms:inbound-gateway规范,connectionFactory将通过名称(属性:connection-factory)注入到网关中,名称默认设置为“jmsConnectionFactory”

默认情况下,所有需要引用ConnectionFactory的JMS适配器都会自动查找名为jmsConnectionFactory的bean。这就是为什么您在许多示例中看不到连接工厂属性。但是,如果JMS ConnectionFactory具有不同的bean名称,则需要提供该属性。

我看不出有什么方法可以为连接工厂设置一个可预测的名称,以便插入int-jms:inbound-gateway。

现在,采用不同的方法,按照这个例子,我用一个合适的名称创建了我的connectionFactory:

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

此外,如果我设置了自己的连接工厂,由于 MQAuto 配置类上的此注释,我将丢失所有 MQ 引导启动器自动魔术:

@ConditionalOnMissingBean(value=javax.jms.ConnectionFactory.class)

关于如何将这些片段组合在一起,有什么想法吗?

编辑:为了避免任何人出现任何可能的红鲱鱼,MQRC2009与ibm.mq.user身份验证MQCSP=假无关。

共有1个答案

权弘新
2023-03-14

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

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

应该可以作为< code > com . IBM . MQ . JMS . mqqueueconnectionfactory 的包装器,但是您必须在目标组件中使用这个< code > jmsqueconnectionfactory 。

虽然看起来上面提到的IBM MQ JMS Spring并没有让我们正确地公开一个< code > JMS connection factory bean。在这种情况下,您可以依赖Spring Integration的默认设置,或者为< code>connection-factory显式使用< code > JMS connection factory 。

此外,对于Spring Boot,您应该考虑远离XML配置,给Spring集成Java DSL一个机会:https://docs . Spring . io/Spring-Integration/docs/5 . 1 . 7 . release/reference/html/# Java-DSL

 类似资料:
  • 我们有一个Spring应用程序,使用Gradle构建,使用Spring Boot 1.2.5运行。释放。我们编写了一些初始集成测试,使用Rest-Assured对Restendpoint进行测试。这起到了作用,我们的应用程序的RESTendpoint通过浏览器和Postman进行了适当的响应。 然后我们使用Spring Security实现了一个OncePerRequest estFilter和我

  • 我在使用Spring Security的前/后授权注释和与Keycloak集成的Servlet API时遇到了问题。我调查了很多文章、教程和以下问题,但没有进一步的运气: 使用KeyClope在servlet应用程序中获取用户角色 Spring Boot Key斗篷-如何获得分配给用户的角色列表 将Spring Security注释与KeyClope一起使用 Spring Boot Spring

  • 是否有其他方法可以为JBoss上的XA连接设置集成安全性,或者在设置xa-datasource-property时告诉它发送一个布尔值? 要再现此行为: a)在JBoss AS配置\standalone\standalone.xml中,向JNDI添加一个新的xa-datasource: 执行此代码将导致一个异常,该异常指出:

  • 集成安全图片(Android) 安全图片生成与下载 安全图片集成 问题排查 集成安全图片(Android) 更新时间:2018-03-28 21:59:18 安全图片生成与下载 安全图片是移动应用的唯一身份校验,生成与下载 请参考Android移动应用的创建和版本配置-创建 appkey 安全图片集成 下载后的安全图片的文件名为 yw_1222_xxxx.jpg ,请放到工程根目录,如下二图所示

  • 集成安全图片(iOS) 安全图片生成与下载 安全图片集成 问题排查 集成安全图片(iOS) 更新时间:2018-02-01 21:17:58 安全图片生成与下载 安全图片是移动应用的唯一身份校验,生成与下载请参考 iOS 移动应用的创建和版本配置 - 创建 appKey 安全图片集成 下载后的安全图片的文件名为 yw_1222_07e8.jpg,请放到工程根目录,并将其拖入到 xcodeproj

  • 问题内容: 我想使用Spring Batch和Spring Integration从数据库导入数据,并将它们写入文件,然后通过ftp将其传输到远程服务器。 但是我想我的问题是我不想为我的表创建域对象。我的查询是随机的,我想要一些可以读取数据并将其写入文件并进行传输的东西。 是否可以在不创建各自的域对象的情况下使用Spring Batch和Integration? 问题答案: 绝对。您可以将JDBC