错误HQ224018:无法创建会话:HornetQException [errorType = SECURITY_EXCEPTION message = HQ119031:无法验证用户:null]
当Jboss EAP 6.3服务器即将接收JMS消息时。我让用户成功通过remoting
子系统进行身份验证,那么为什么用户为空?如何克服这个错误?
答案 0 :(得分:11)
EAP文档可以帮助您:
(...)将 allowClientLogin 设置为true(...)如果你想要HornetQ来 使用传播的安全性进行身份验证,然后将 authoriseOnClientLogin 也设置为true。
但由于HORNETQ-883 bug,您必须关闭消息传递的安全性:
<hornetq-server>
<!-- … -->
<security-enabled>false</security-enabled>
<!-- … -->
</hornetq-server>
答案 1 :(得分:0)
简而言之, if 您的JMS客户端是从JEE容器中连接而不需要提供凭据来连接到JMS(在调用factory.createConnection()
时),然后使用InVM
连接器。打开与JMS的连接时, InVM连接器不需要凭据(因为调用者在JVM实例中,因此名称),但仍然强制执行远程JMS客户端的安全性。连接器和ConnectionFactories在urn:jboss:domain:messaging
的{{1}}子系统中配置。
否则,如果在启用安全性的情况下不使用InVM连接器,则可能需要在standalone.xml
中运行add-user
脚本以将客户端凭据添加到[jboss-home]/bin
文件中在为通过远程可用工厂连接的远程和InVM客户端调用appilcation-users.properties
时提供这些凭据。
在我们的JBoss EAP 6.4实例中,需要为远程连接(JVM外部)保持安全性,因此我们适当地指定了HornetQ的factory.createConnection(username, pwd)
。因此,JMS ConnectionFactory根据配置的连接器指定安全级别。
<security-settings>
因此,在JMS客户端中应用标准连接样板:
<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>
并在创建连接时:
InitialContext context = new InitialContext();
javax.jms.ConnectionFactory factory = (ConnectionFactory) context.lookup("java:/ConnectionFactory");
对于与JMS的事务感知容器内客户端连接,我们的javax.jms.Connection connection = factory.createConnection();
ConnectionFactory配置如下:
InVM
获取事务处理的JMS 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>