2014-06-30 27 views
3

我正在使用一些Java/Spring Web應用程序和RabbitMQ。 我有App1和App2上的相同 tomcat服務器的地址爲192.168.0.101。 它們都與位於:192.168.0.100的RabbitMQ服務器進行通信。RabbitMQ包含有效信息的憑據無效

應用1在Spring上下文這個配置:

<bean id="connectionFactory" 
    class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory" 
    destroy-method="destroy"> 
    <property name="host" value="192.168.0.100" /> 
    <property name="username" value="app" /> 
    <property name="password" value="guest" /> 
    <property name="virtualHost" value="/" /> 
</bean> 

應用2具有除了不同的用戶名相同的配置,讓我們說:

<bean id="connectionFactory" 
    class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory" 
    destroy-method="destroy"> 
    <property name="host" value="192.168.0.100" /> 
    <property name="username" value="app2" /> 
    <property name="password" value="guest" /> 
    <property name="virtualHost" value="/" /> 
</bean> 

的問題是,應用1可以成功連接到RabbitMQ服務器和App2在RabbitMQ日誌中始終存在invalid credentials錯誤。

下面是這些用戶的權限列表:

Listing permissions in vhost "/" ... 
app .* .* .* 
app2 .* .* .* 

,這裏是我所得到的,當我嘗試使用API​​(有兩個用戶)登錄:curl -i -u app:guest http://192.168.0.100:15672/api/whoamicurl -i -u app2:guest http://192.168.0.100:15672/api/whoami

HTTP/1.1 401 Unauthorized 
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) 
Date: Mon, 30 Jun 2014 14:58:37 GMT 
Content-Length: 57 

{"error":"not_authorised","reason":"Not management user"} 

這似乎很正常,我認爲,每個用戶都被認爲是有效的用戶,但未被授權進行管理。當我設置爲APP2管理標籤,我得到這個:

curl -i -u app2:guest http://192.168.0.100:15672/api/whoami 
HTTP/1.1 200 OK 
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact) 
Date: Mon, 30 Jun 2014 15:14:29 GMT 
Content-Type: application/json 
Content-Length: 80 
Cache-Control: no-cache 

{"name":"app2","tags":"management","auth_backend":"rabbit_auth_backend_internal"} 

我知道這是一個很大的代碼,但,這是我得到的,我要放棄,永遠不知道發生了什麼事情。我真的不明白我做錯了什麼,因爲配置看起來完全一樣。

您認爲如何?

在此先感謝!很多。

編輯: 這裏是RabbitMQ的日誌行,我得到的,當APP 2試圖連接:

=ERROR REPORT==== 30-Jun-2014::16:42:38 === 
closing AMQP connection <0.1241.0> (192.168.0.101:52871 -> 192.168.0.100:5672): 
{handshake_error,starting,0, 
      {amqp_error,access_refused, 
         "PLAIN login refused: user 'app2' - invalid credentials", 
         'connection.start_ok'}} 

EDIT2: 這裏是Java錯誤日誌,我在APP 2試圖連接的那一刻得到:

Caused by: com.rabbitmq.client.PossibleAuthenticationFailureException: Possibly caused by authentication failure 
     at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:355) 
     at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:516) 
     at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:545) 
     at org.springframework.amqp.rabbit.connection.AbstractConnectionFactory.createBareConnection(AbstractConnectionFactory.java:181) 
     ... 48 more 
    Caused by: com.rabbitmq.client.ShutdownSignalException: connection error; reason: java.net.SocketException: Connection reset 
     at com.rabbitmq.utility.ValueOrException.getValue(ValueOrException.java:67) 
     at com.rabbitmq.utility.BlockingValueOrException.uninterruptibleGetValue(BlockingValueOrException.java:33) 
     at com.rabbitmq.client.impl.AMQChannel$BlockingRpcContinuation.getReply(AMQChannel.java:343) 
     at com.rabbitmq.client.impl.AMQChannel.privateRpc(AMQChannel.java:216) 
     at com.rabbitmq.client.impl.AMQChannel.rpc(AMQChannel.java:202) 
     at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:347) 
     ... 51 more 
    Caused by: java.net.SocketException: Connection reset 
     at java.net.SocketInputStream.read(SocketInputStream.java:196) 
     at java.net.SocketInputStream.read(SocketInputStream.java:122) 
     ... 
+0

對我沒有意義;你可以運行wireshark並查看'Connection.Start-Ok'包嗎? 'PLAIN'之後你應該看到用戶/ pw。 –

+0

另外,在管理頁面上檢查用戶,是否標記爲「可以使用密碼登錄」的複選框? –

+0

對我也沒有意義!我們嘗試了Wireshark,然後看到數據包,最後我看到了正確的用戶名和密碼(我在我的帖子中將用戶名更改爲通用用戶名),但在wireshark中看到「紅線」,之後帶有'RST,ACK'標誌的'Start-Ok'數據包。 哦,並且用戶有「可以使用密碼登錄」複選框選中... 我們正在分析其他用戶的數據包進行比較。 – TheCypher

回答

0

因爲時間不利於我,我決定從服務器上卸載並徹底清除Tomcat,然後重新安裝,然後逐個放入每個應用程序。

猜猜看,它們都成功連接到RabbitMQ,沒有任何警告/錯誤。

所以,如果有人知道這裏特定的(外部)Tomcat的配置如何防止一個應用程序特別是與RabbitMQ的歡迎您溝通......

通過「外部」我的意思是「不是應用相關「配置。我不是一個真正的Tomcat專家,我知道有很多文件和很多配置方法,我仍然很想知道發生了什麼。

+0

我不明白這與Tomcat有什麼關係 - 你的問題表明你的連接工廠配置是在Spring中(你沒有使用JNDI)。很奇怪。 –