Недопустимые учетные данные RabbitMQ с действительной информацией

#java #spring #rabbitmq #credentials #spring-amqp

#java #весна #rabbitmq #учетные данные #spring-amqp

Вопрос:

Я работаю с некоторыми веб-приложениями Java / Spring и RabbitMQ. У меня есть App1 и App2 на том же сервере tomcat по адресу 192.168.0.101 . Они оба взаимодействуют с сервером RabbitMQ, расположенным по адресу : 192.168.0.100 .

Приложение 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>
  

App2 имеет ту же конфигурацию, за исключением другого имени пользователя, скажем:

 <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>
  

Проблема в том, что App1 может успешно подключиться к серверу RabbitMQ, а App2 всегда имеет invalid credentials ошибку в журналах RabbitMQ.

Вот список разрешений для этих пользователей:

 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, которую я получаю, когда app2 пытается подключиться:

 =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'}}
  

ПРАВКА2:
И вот журнал ошибок Java, который я получаю в тот момент, когда app2 пытается подключиться:

     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)
        ...
  

Комментарии:

1. Для меня это не имеет смысла; можете ли вы запустить wireshark и посмотреть на Connection.Start-Ok пакет? Вы должны увидеть user / pw немного позже PLAIN .

2. Кроме того, проверьте пользователя на странице администратора, установлен ли флажок «Можно войти с паролем»?

3. Для меня тоже нет смысла! Мы попробовали Wireshark, и я вижу пакет, и в конце я вижу точно правильные имя пользователя и пароль (я изменил имя пользователя здесь, в моем сообщении, на общие имена пользователей), но я вижу «красную строку» в wireshark после Start-Ok пакета с RST,ACK флагами.. О, и у пользователя установлен флажок «Может входить с паролем»… Мы анализируем пакеты для другого пользователя для сравнения.

4. Я просто попытался переделать, app2 основываясь на app конфигурации (просто изменил классы Java), но файлы конфигурации теперь точно такие же … тоже не сработали. Мы даже пытались завершить работу app , чтобы избежать возможного конфликта соединений (не сработало). И мы даже пытались использовать app учетные данные (которые работают для app ), с app2 , … не сработало (тот же журнал ошибок RabbitMQ invalid credentials … и т.д. для другого имени пользователя). Может быть, это какая-то проблема с конфигурацией tomcat более низкого уровня?

5. Убедитесь, что вы подключаетесь к правильному виртуальному хосту или просто к вашему пользовательскому разрешению с подстановочным знаком для всех объектов во всех виртуальных хостах для rwx, чтобы диагностировать, является ли это корнем вашей проблемы.

Ответ №1:

Поскольку время было против нас, я решил удалить и полностью удалить Tomcat с сервера и выполнить новую установку, а затем поместить каждое приложение по одному.

Угадайте, что, они оба успешно подключаются к RabbitMQ без каких-либо предупреждений / ошибок любого рода.

Итак, если кто-нибудь здесь знает, как определенная (внешняя) конфигурация tomcat может помешать ОДНОМУ приложению, в частности, взаимодействовать с RabbitMQ, добро пожаловать…

Под «внешней» я подразумеваю конфигурацию, «не связанную с приложением». Я на самом деле не эксперт по Tomcat, я знаю, что есть много файлов и много способов их настройки, и мне все еще интересно узнать, что произошло.

Комментарии:

1. Я не понимаю, как это имеет / имело какое-либо отношение к Tomcat — в вашем вопросе говорилось, что ваша конфигурация фабрики соединений была весной (вы не используете JNDI). Очень странно.