我正在使用一些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/whoami
和curl -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)
...
對我沒有意義;你可以運行wireshark並查看'Connection.Start-Ok'包嗎? 'PLAIN'之後你應該看到用戶/ pw。 –
另外,在管理頁面上檢查用戶,是否標記爲「可以使用密碼登錄」的複選框? –
對我也沒有意義!我們嘗試了Wireshark,然後看到數據包,最後我看到了正確的用戶名和密碼(我在我的帖子中將用戶名更改爲通用用戶名),但在wireshark中看到「紅線」,之後帶有'RST,ACK'標誌的'Start-Ok'數據包。 哦,並且用戶有「可以使用密碼登錄」複選框選中... 我們正在分析其他用戶的數據包進行比較。 – TheCypher