Mule/Anypoint JMS 和 JBoss/Wildfly9 之间的身份验证?
Authentication between Mule/Anypoint JMS and JBoss/Wildfly9?
我正在为一个更大的项目所需的功能做一个小的概念验证。
在我的本地计算机上,我安装了 Wildfly 9(配置了用户、密码和组)。我可以从一个小的 Java 程序通过 HornetQ 发送消息,我可以 fiddle 与 <security-enabled>
和 user/password 并查看它是否有效,如我所料。太棒了!
但是,我还有一个简单的 Mule 流,它尝试通过 JMS 出站端点发送消息——但这总是失败并显示“HQ119031:无法验证用户:null”,尽管我确实(尝试)提供了一个名字。我根本不知道在哪里以及如何指定我知道(来自 Java 程序)工作的 user/password。
我从一位同事那里得知,他没有提供太多信息让我继续,他已经联系了 MuleSoft 支持,他们说 "they have no knowledge of Wildfly in conjunction with 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 的建议不是 "it",或者可能只是不是 "enough"。如果我禁用 "security-enabled",那么它将成功部署,但当我尝试发送消息时会失败:
堆栈跟踪报告的顶部 "javax.jms.JMSException: There is no queue with name jms/queue/CoordReceive"。我目前正在弄清楚发生了什么 -- 我 知道 队列存在,因为 Java 程序有效。 到Google!
这是我以前在 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>
啊哈! C:\wildfly\domain\application-users.properties
和 C:\wildfly\standalone\configuration\application-users.properties
中的用户配置之间存在不匹配(主要是由于我缺乏理解)。一旦我为管理控制台(在 domain
中) 以及为队列(在 standalone
中)配置了 用户,我就起来了 运行.
我正在为一个更大的项目所需的功能做一个小的概念验证。
在我的本地计算机上,我安装了 Wildfly 9(配置了用户、密码和组)。我可以从一个小的 Java 程序通过 HornetQ 发送消息,我可以 fiddle 与 <security-enabled>
和 user/password 并查看它是否有效,如我所料。太棒了!
但是,我还有一个简单的 Mule 流,它尝试通过 JMS 出站端点发送消息——但这总是失败并显示“HQ119031:无法验证用户:null”,尽管我确实(尝试)提供了一个名字。我根本不知道在哪里以及如何指定我知道(来自 Java 程序)工作的 user/password。
我从一位同事那里得知,他没有提供太多信息让我继续,他已经联系了 MuleSoft 支持,他们说 "they have no knowledge of Wildfly in conjunction with 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 的建议不是 "it",或者可能只是不是 "enough"。如果我禁用 "security-enabled",那么它将成功部署,但当我尝试发送消息时会失败:
堆栈跟踪报告的顶部 "javax.jms.JMSException: There is no queue with name jms/queue/CoordReceive"。我目前正在弄清楚发生了什么 -- 我 知道 队列存在,因为 Java 程序有效。 到Google!
这是我以前在 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>
啊哈! C:\wildfly\domain\application-users.properties
和 C:\wildfly\standalone\configuration\application-users.properties
中的用户配置之间存在不匹配(主要是由于我缺乏理解)。一旦我为管理控制台(在 domain
中) 以及为队列(在 standalone
中)配置了 用户,我就起来了 运行.