2012-03-02 26 views
3

環境:javax.jms.JMSSecurityException:無法驗證用戶:空

的Jboss 7.1.0 操作系統Windows

我想要一個簡單的測試來嘗試使用JBoss的JMS內置的HornetQ的JMS供應商。大量的玩耍後,我設法讓這種配置的響應

 final Properties env = new Properties(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); 
     env.put(Context.PROVIDER_URL, "remote://localhost:4447"); 
     env.put(Context.SECURITY_PRINCIPAL, "appuser2"); 
     env.put(Context.SECURITY_CREDENTIALS, "s3cr3t");   

的問題是,雖然當我運行它,我得到以下錯誤:

javax.jms.JMSSecurityException: Unable to validate user: null 
    at org.hornetq.core.protocol.core.impl.ChannelImpl.sendBlocking(ChannelImpl.java:286) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.createSessionInternal(ClientSessionFactoryImpl.java:695) 
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.createSession(ClientSessionFactoryImpl.java:264) 
    at org.hornetq.jms.client.HornetQConnection.authorize(HornetQConnection.java:589) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:694) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:121) 
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:116) 
    at com.jms.client.ConsoleClient.runExample(ConsoleClient.java:51) 
    at com.jms.client.ConsoleClient.main(ConsoleClient.java:20) 
Caused by: HornetQException[errorCode=105 message=Unable to validate user: null] 
    ... 9 more 

我一直環顧谷歌和每個例子似乎都指出如何將HornetQ的安全設置配置爲獨立服務器。我無法弄清楚如何在Jboss上配置用戶,以及我是否需要。

任何想法?

+0

記得有這個問題前一段時間與JBoss 5.1.0GA。我記得通過在hornetq.sar/hornetq-users.xml中添加適當的用戶/每個隊列來修復它。 我不知道HornetQ是如何在JBoss 7中使用的,但也許這個提示會指向你正確的方向。 – Sergiu 2012-03-06 11:39:44

回答

0

我同意Sergiu,並會添加隊列可以設置,無需用戶名和密碼。

14

看來你創建一個用戶名和密碼QueueConnection如下:

QueueConnection qcon = qconFactory.createQueueConnection("appuser2","s3cr3t"); 

如果你不這樣做,你會得到這個錯誤

Unable to validate user: null.

如果你不這樣做想要使用用戶名和密碼,您可以設置值爲false的安全啓用,如下所示:

<subsystem xmlns="urn:jboss:domain:messaging:1.1"> 
    <hornetq-server> 
     <security-enabled>false</security-enabled> 
     ...... 
    </hornetq-server> 
</subsystem> 

然後你可以創建一個QueueConnection沒有用戶名和密碼如下:

QueueConnection qcon = qconFactory.createQueueConnection(); 
+0

這工作正常! – Shalika 2017-08-30 06:56:07

1

它爲我工作。我在standalone-full.xml中添加了以下內容:

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

檢查您的standalone-full.xml。如果urn:jboss:domain:messaging-activemq:1.0這個樣子的配置的角色:

<security-setting name="#"> 
     <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true"/> 
</security-setting> 

然後,你必須:

  1. 創建來賓用戶(請確保您設置的角色guest給用戶);
  2. 設置如下所示的初始上下文:

Properties props = new Properties(); props.put(Context.PROVIDER_URL, "http-remoting://localhost:8080"); props.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory"); props.put(Context.SECURITY_PRINCIPAL, "username"); props.put(Context.SECURITY_CREDENTIALS, "password"); InitialContext ctx = new InitialContext(props);

  • 創建上下文如下:
  • ConnectionFactory cf = (ConnectionFactory) ctx.lookup("jms/RemoteConnectionFactory"); Queue queue = (Queue) ctx.lookup("jms/queue/queueName"); JMSContext context = cf.createContext("username", "password");