【问题标题】:Authentication between Mule/Anypoint JMS and JBoss/Wildfly9?Mule/Anypoint JMS 和 JBoss/Wildfly9 之间的身份验证?
【发布时间】:2016-01-19 07:37:36
【问题描述】:

我正在为一个大型项目所需的功能做一个小的概念证明。

在我的本地机器上,我安装了 Wildfly 9(配置了用户、密码和组)。我可以从一个小型 Java 程序通过 HornetQ 发送消息,我可以摆弄<security-enabled> 和用户/密码,看看它是否可以正常工作,如我所料。太好了!

但是,我还有一个简单的 Mule 流,它尝试通过 JMS 出站端点发送消息——但这总是失败并显示“HQ119031:无法验证用户:null”,即使我做(尝试)提供一个名字。我根本不知道在哪里以及如何指定我知道(来自 Java 程序)要工作的用户/密码。

我从一位没有给我太多信息的同事那里得知,他已经与 MuleSoft 支持人员取得了联系,他说“他们不了解 Wildfly 与 Mule 的结合”并且无法提供帮助.

这是我的连接器和流程:

<jms:connector name="Wildfly9JMSConnector"
    jndiInitialFactory="org.jboss.naming.remote.client.InitialContextFactory"
    jndiProviderUrl="http-remoting://127.0.0.1:8085"
    connectionFactoryJndiName="jms/RemoteConnectionFactor"
    jndiDestinations="true" forceJndiDestinations="true"
    disableTemporaryReplyToDestinations="true"
    username="inara"
    password="whitefall"
    doc:name="JMS" validateConnections="true">
</jms:connector>

<flow name="jbossconnectiontestFlow">
    <http:listener config-ref="HTTP_Listener_Configuration"
        path="/jbosstest" doc:name="HTTP" />

    <set-payload value="Shiny!" doc:name="Set Payload" />

    <logger message="1. payload: #[payload]" level="INFO" doc:name="Logger" />
    <jms:outbound-endpoint exchange-pattern="request-response" queue="jms/queue/CoordReceive" connector-ref="Wildfly9JMSConnector" doc:name="JMS">
        <jms:transaction action="BEGIN_OR_JOIN"/>
    </jms:outbound-endpoint>
    <set-payload value="JMS message sent." doc:name="Set Payload"/>
    <logger message="2. payload: #[payload]" level="INFO" doc:name="Logger"/>

    <catch-exception-strategy doc:name="Catch Emdxception Strategy">
        <logger level="INFO" doc:name="Logger" />
    </catch-exception-strategy>
</flow>

部分堆栈跟踪:

ERROR 2015-10-20 16:53:01,948 [main] org.mule.retry.notifiers.ConnectNotifier: Failed to connect/reconnect: JmsConnector
{
  name=Wildfly9JMSConnector
  lifecycle=initialise
  this=6540cf1d
  numberOfConcurrentTransactedReceivers=4
  createMultipleTransactedReceivers=true
  connected=false
  supportedProtocols=[jms]
  serviceOverrides=<none>
}
. Root Exception was: HQ119031: Unable to validate user: null. Type: class org.hornetq.api.core.HornetQSecurityException
ERROR 2015-10-20 16:53:01,956 [main] org.mule.module.launcher.application.DefaultMuleApplication: null
org.hornetq.api.core.HornetQSecurityException: HQ119031: Unable to validate user: null

我希望你会想要更多的信息,更多的细节,但我不想用错误的数据淹没你——所以问,你会收到的。

更新:遗憾的是,@RyanCarter 的建议不是“它”,或者可能只是“不够”。如果我禁用“启用安全性”,那么它将成功部署,但当我尝试发送消息时会失败:

堆栈跟踪的顶部报告“javax.jms.JMSException:没有名为 jms/queue/CoordReceive 的队列”。我目前正在弄清楚发生了什么——我知道队列存在,因为 Java 程序可以工作。 谷歌!

【问题讨论】:

  • 现在,我已经找到了一个解决方法,嗯,工作:我使用 Java 组件代替 JMS 连接器,然后处理 Java 中的 Wildfly 接口。我仍然更喜欢它,这就是为什么这只是一个评论而不是一个自我回答。需要明确的是,这个问题仍然悬而未决。
  • 另外,我需要处理 来自 Wildfly 的传入消息,为此我无法使用 Java 解决方法..

标签: xml authentication mule wildfly anypoint-studio


【解决方案1】:

这是我之前在 Jboss 7+ 中将 JNDI 与 HornetQ 一起使用的一种方法。在两个地方设置用户名和密码。一个用于 JNDI 连接,一个用于队列级身份验证

<spring:bean id="jndiProviderProperties" class="org.springframework.beans.factory.config.MapFactoryBean">
  <spring:property name="sourceMap">
      <spring:map>
        <spring:entry key="java.naming.security.principal" value="inara"/>
        <spring:entry key="java.naming.security.credentials" value="whitefall"/>
      </spring:map>
  </spring:property>
</spring:bean>

<jms:connector name="jms-connector" jndiInitialFactory="org.jboss.naming.remote.client.InitialContextFactory"
    jndiProviderUrl="remote://localhost:4447"
    connectionFactoryJndiName="jms/RemoteConnectionFactory" jndiDestinations="false"
    forceJndiDestinations="false" createMultipleTransactedReceivers="true" username="inara" password="whitefall"
    numberOfConcurrentTransactedReceivers="10" disableTemporaryReplyToDestinations="true" jndiProviderProperties-ref="jndiProviderProperties">
</jms:connector>

【讨论】:

  • 哇!我的代码第一次成功部署!这次真是万分感谢! ...但是,现在当我实际触发流程并发送消息时,我得到了其他错误。我应该把这个放在一个新的问题上吗?我先做一些研究。
  • 哦,该死的,不知何故,我设法将“启用安全性”设置为“假”。当我打开它时 - 旧的错误又回来了。毕竟,这还不够,或者说还不够。 (很抱歉重新打开答案。)
【解决方案2】:

啊哈! C:\wildfly\domain\application-users.propertiesC:\wildfly\standalone\configuration\application-users.properties 中的用户配置之间存在不匹配(主要是由于我缺乏理解)。一旦我为管理控制台(domain以及为队列(standalone)配置了用户,我就可以启动并运行了。

【讨论】:

    猜你喜欢
    • 2013-01-04
    • 1970-01-01
    • 2013-04-15
    • 2012-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2016-06-17
    相关资源
    最近更新 更多