IBM MQ и Spring Integration - настройки безопасности - PullRequest
3 голосов
/ 22 сентября 2019

У меня есть поток Spring Integration, который использует входящий шлюз для получения сообщений из очереди IBM MQ:

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

Однако я не могу назначить параметры безопасности.В частности, мне нужны имя пользователя, пароль и userAuthenticationMQCSP = false (по причинам, выходящим за рамки этого поста, я не буду вдаваться в подробности, но мой брокер выдаст MQRC = 2009 в противном случае).

I 'Мы следовали руководству IBM по соединению с jmsTemplate и работают просто отлично.При этом используется официальный начальный загрузчик Spring от IBM MQ , который любезно создаст фабрику соединений и автоматически сконфигурирует ее с некоторыми значениями по умолчанию из 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 будет внедрен в шлюз по имени (атрибут: фабрика соединений), который по умолчанию настроен как «jmsConnectionFactory»

По умолчанию все адаптеры JMS, для которых требуется ссылка на ConnectionFactory, автоматически ищут bean-компонент с именем jmsConnectionFactory.Вот почему вы не видите атрибут фабрики соединений во многих примерах.Однако, если ваш JMS ConnectionFactory имеет другое имя компонента, вам нужно предоставить этот атрибут.

Я не вижу способа установить предсказуемое имя для фабрики соединений, к которой я могу подключиться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.

Кроме того, если я настрою свойБлагодаря собственной аннотации к классу MQAutoConfiguration :

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

Есть идеи о том, как собрать эти части вместе?

Спасибо!(и извиняюсь, если вопрос выглядит неубедительным, но я не очень разбирался в этой ситуации)

РЕДАКТИРОВАТЬ: Просто, чтобы избежать любых возможных красных сельдей, MQRC2009 не имеет отношения к ibm.mq.userAuthenticationMQCSP = false.

1 Ответ

2 голосов
/ 23 сентября 2019

В некоторых моих старых проектах я использовал такой компонент:

<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 - это не значит, что мы правильно выставили бин jmsConnectionFactory.В этом случае вы можете положиться на значение по умолчанию для Spring Integration или использовать это явно в jmsConnectionFactory для connection-factory.

. Также в Spring Boot вы должны отказаться от конфигурации XML и дать шанс SpringИнтеграция Java DSL: https://docs.spring.io/spring-integration/docs/5.1.7.RELEASE/reference/html/#java-dsl

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...