2014-11-05 88 views
2

我試圖配置JBoss EAP 6.3 JMS橋在安全環境中工作。看來它根本不可能。Jboss EAP 6.3:HQ119031:無法驗證用戶:USERNAME

我的配置由兩個(相同的)JBoss EAP安裝組成:稱它們爲提供者和消費者。 Provider定義了一個隊列,並且消費者使用netty連接工廠將其連接到本地隊列。使用

<security-enabled>false</security-enabled> 

當我激活的安全,如果安全性是雙方停用的配置工作正常,消費者是無法構建橋樑。我使用的是雙方相同的安全域通過指定:

<security-domain>myDomain</security-domain> 

我也試圖指定橋樑施工過程中的用戶名/密碼組合:

<jms-bridge name="..."> 
    <source> 
     <connection-factory name="RemoteConnectionFactory" /> 
     <user>USERNAME</user> 
     <password>secret</password> 
     <destination>jms/topic/whatever</destination> 
    </source> 
... 
</jms-bridge> 

如果我不指定用戶名/密碼,觀察到Jboss EAP 6.3: HQ119031: Unable to validate user: null中描述的行爲。如果我指定的JMS橋的源配置的用戶名,例外的是一樣的,但我看到指定的用戶名,而不是空:

ERROR HQ122010: Failed to connect JMS Bridge: javax.jms.SecurityException: HQ119031: Unable to validate user: USERNAME] 
    at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:399) 
    .... 
    .... 
Caused by: HornetQException[errorType=SECURITY_EXCEPTION message=HQ119031: Unable to validate user: USERNAME] 

安全域,還用於與EJB3使用RMI和USERNAME是有效的用戶。

我錯過了什麼嗎?禁用消息傳遞的安全性不是我們的選擇。所以如果有任何解決方法,請幫助!

親切的問候,

西蒙

+0

涉及http://stackoverflow.com/questions/26420490/jboss-eap-6-3-hq119031-unable-to-validate-user-null – 2014-11-05 16:04:01

回答

0

你有沒有嘗試添加用戶名和密碼,您的橋樑方面?

<jms-bridge name="myBridge"> 
    <source> 
     <connection-factory name="jms/RemoteConnectionFactory"/> 
     <destination name="jms/queue/bridgeQueue"/> 
     <user>guest</user> 
     <password>pass</password> 
     <context> 
      <property key="java.naming.factory.initial" value="org.jboss.naming.remote.client.InitialContextFactory"/> 
      <property key="java.naming.provider.url" value="remote://xx.xx.xx.xx:xxxx"/> 
      <property key="java.naming.security.principal" value="guest"/> 
      <property key="java.naming.security.credentials" value="pass"/> 
     </context> 
    </source> 
    <target> 
     <connection-factory name="java:/ConnectionFactory"/> 
     <destination name="jms/queue/testQueue"/> 
    </target> 
    <quality-of-service>AT_MOST_ONCE</quality-of-service> 
    <failure-retry-interval>500</failure-retry-interval> 
    <max-retries>1</max-retries> 
    <max-batch-size>500</max-batch-size> 
    <max-batch-time>500</max-batch-time> 
    <add-messageID-in-header>true</add-messageID-in-header> 
</jms-bridge> 
+1

把上下文信息到源部分的configuraiton該橋會導致嘗試以不同的方式創建JNDI上下文,而該橋默認情況下會自動創建。所以我試了一下,但沒有幫助。 – 2014-11-06 10:18:27

1

當我們在同一臺機器上的兩個JBosses運行本地測試,我們有同樣的錯誤(HQ119031:無法驗證用戶)。在我們的例子中,問題在於我們使用「遠程」JBoss中的add-user腳本創建了用戶,但是腳本實際上是在客戶端JBoss中創建了用戶。爲什麼?因爲我們已經設置了JBOSS_HOME變量並且腳本使用了該變量。我們刪除了變量並解決了問題。

因此,我建議仔細檢查一下您正在使用的用戶是否真正在遠程JBoss配置中的application-users.properties文件中列出。

現在我們有一個安全的JMS橋樑。這裏是一個描述:

  • 客戶端(發件人)是JBoss EAP 6.3.3。在獨立/ domain.xml中內的通訊子系統配置有:

    <bridges> 
        <bridge name="myBridge"> 
         <queue-name>jms.queue.MyQueueLocal</queue-name> 
         <forwarding-address>jms.queue.MyQueue</forwarding-address> 
         <retry-interval>5000</retry-interval> 
         <retry-interval-multiplier>2.0</retry-interval-multiplier> 
         <failover-on-server-shutdown>false</failover-on-server-shutdown> 
         <use-duplicate-detection>true</use-duplicate-detection> 
         <confirmation-window-size>10000000</confirmation-window-size> 
         <user>myUser</user> 
         <password>passwdInClear</password> 
         <static-connectors> 
          <connector-ref>netty-remote</connector-ref> 
         </static-connectors> 
        </bridge> 
    </bridges> 
    
  • 其中<connectors>的是:

    <netty-connector name="netty-remote" socket-binding="remote-jms"/> 
    
  • <security-realm name="ApplicationRealm">我們有下面幾行。祕密值是使用add-user腳本創建用戶時看到的Base64散列值。

    <server-identities> 
        <secret value="cEBzc3cwcmQ="/> 
    </server-identities> 
    
  • 然後內<socket-binding-group>我們有:

    <outbound-socket-binding name="remote-jms"> 
        <remote-destination host="myRemoteHost" port="5445"/> 
    </outbound-socket-binding> 
    
  • 在遠程JBoss(也EAP 6.3.3),獨立/ domain.xml中示出了隊列myQueue中的通常消息傳送配置和聲明。

  • 在此服務器上,我們使用add-user創建了用戶帳戶。用戶屬於ApplicationRealmguest組。

  • 當然,客戶端JBoss上的發件人應用程序將消息發送到MyQueueLocal。