Jboss EAP 6.3: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

错误HQ224018:未能创建会话:HornetQException[errorType=SECURITY\u异常消息=HQ119031:无法验证用户:null]


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");