Jboss EAP 6.3:HQ119031:无法验证用户:null
错误HQ224018:未能创建会话:HornetQException[errorType=SECURITY\u异常消息=HQ119031:无法验证用户:null]Jboss EAP 6.3:HQ119031:无法验证用户:null,jboss,jms,Jboss,Jms,错误HQ224018:未能创建会话:HornetQException[errorType=SECURITY\u异常消息=HQ119031:无法验证用户:null] Jboss EAP 6.3服务器即将接收JMS消息时。我已通过remoting子系统成功验证了该用户,那么为什么该用户为空?如何克服此错误?EAP文档鼓励您: (…)如果希望HornetQ 使用传播的安全性进行身份验证,然后将authorizeOnClientLogin也设置为true 但是由于您必须关闭邮件的安全性: <hor
Jboss EAP 6.3服务器即将接收JMS消息时。我已通过
remoting
子系统成功验证了该用户,那么为什么该用户为空?如何克服此错误?EAP文档鼓励您:
(…)如果希望HornetQ
使用传播的安全性进行身份验证,然后将authorizeOnClientLogin也设置为true
但是由于您必须关闭邮件的安全性:
<hornetq-server>
<!-- … -->
<security-enabled>false</security-enabled>
<!-- … -->
</hornetq-server>
假的
简而言之,如果您的JMS客户端是从JEE容器中连接的,并且不需要提供连接到JMS的凭据(调用factory.createConnection()
),则使用InVM
连接器获取连接。InVM连接器在打开到JMS的连接时不需要凭据(因为调用者位于JVM实例中,因此命名),但仍然强制远程JMS客户端的安全性。连接器和连接工厂在standalone.xml
的urn:jboss:domain:messaging
子系统中配置
否则,如果不使用启用了安全性的InVM连接器,则可能需要运行[jboss home]/bin
中的添加用户
脚本,将客户端凭据添加到应用程序用户.properties
文件中,并在调用工厂.createConnection(用户名,pwd)时提供这些凭据
适用于通过远程可用工厂连接的远程和InVM客户端
血淋淋的细节
在我们的JBoss EAP 6.4实例中,需要为远程连接(JVM之外)保持启用安全性,以便适当地指定HornetQ的
。因此,JMS ConnectionFactory根据其配置的连接器来指定安全级别
<hornetq-server>
<connectors>
<!-- additional connectors here -->
...
<in-vm-connector name="in-vm" server-id="0"/>
</connectors>
<jms-connection-factories>
<connection-factory name="InVmConnectionFactory">
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<!-- JNDI bindings here -->
<entry name="java:/ConnectionFactory" />
</entries>
</connection-factory>
...
</jms-connection-factories>
创建连接时:
javax.jms.Connection connection = factory.createConnection();
事务JMS
对于JMS的容器内事务感知客户端连接,我们的InVM
ConnectionFactory配置如下:
<jms-connection-factories>
...
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa"/>
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/JmsXA"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>
当我使用RemoteConnectionFactory时,您的解决方案不起作用,但作为Zbig的解决方案,它起作用了
<jms-connection-factories>
...
<pooled-connection-factory name="hornetq-ra">
<transaction mode="xa"/>
<connectors>
<connector-ref connector-name="in-vm"/>
</connectors>
<entries>
<entry name="java:/JmsXA"/>
</entries>
</pooled-connection-factory>
</jms-connection-factories>
InitialContext context = new InitialContext();
javax.jms.ConnectionFactory factory = (ConnectionFactory) context.lookup("java:/JmsXA");