Jboss EAP 6.3:HQ119031:无法验证用户:null

时间:2014-10-17 07:59:47

标签: jboss jms

  

错误HQ224018:无法创建会话:HornetQException [errorType = SECURITY_EXCEPTION message = HQ119031:无法验证用户:null]

当Jboss EAP 6.3服务器即将接收JMS消息时。我让用户成功通过remoting子系统进行身份验证,那么为什么用户为空?如何克服这个错误?

2 个答案:

答案 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

对于与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>