web-dev-qa-db-ja.com

Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED-認証メカニズムPLAINを使用してログインが拒否されました

私は例外を下回っています

org.springframework.amqp.AmqpAuthenticationException:com.rabbitmq.client.AuthenticationFailureException:ACCESS_REFUSED-認証メカニズムPLAINを使用してログインが拒否されました。詳細については、ブローカーのログファイルを参照してください。

構成:Windows上のRabbitMQ 3.3.5

%APPDATA%\RabbitMQ\rabbit.configのConfigファイルで https://www.rabbitmq.com/access-control.html に従って以下の変更を行いました

[{rabbit, [{loopback_users, []}]}].

また、user/pwdを作成しようとしました-test/testが機能しないようです。

this postからステップを試行しました。

その他の構成の詳細は次のとおりです。

TomcatがホストするSpringアプリケーションコンテキスト:

<!-- Rabbit MQ configuration Start -->
    <!-- Connection Factory -->
    <rabbit:connection-factory id="rabbitConnFactory" virtual-Host="/" username="guest" password="guest" port="5672"/>

    <!-- Spring AMQP Template -->
    <rabbit:template id="rabbitTemplate" connection-factory="rabbitConnFactory" routing-key="ecl.down.queue" queue="ecl.down.queue" />

    <!-- Spring AMQP Admin -->
    <rabbit:admin id="admin" connection-factory="rabbitConnFactory"/>

    <rabbit:queue id="ecl.down.queue" name="ecl.down.queue" />

    <rabbit:direct-exchange name="ecl.down.exchange">
        <rabbit:bindings>
            <rabbit:binding key="ecl.down.key" queue="ecl.down.queue"/>
        </rabbit:bindings>
    </rabbit:direct-exchange>

私のコントローラークラス

@Autowired
RmqMessageSender rmqMessageSender;

//Inside a method
rmqMessageSender.submitToECLDown(orderInSession.getOrderNo());

マイメッセージ送信者:

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component("messageSender")
public class RmqMessageSender  {

    @Autowired
    AmqpTemplate                rabbitTemplate;

    public void submitToRMQ(String orderId){
        try{
            rabbitTemplate.convertAndSend("Hello World");
        } catch (Exception e){
            LOGGER.error(e.getMessage());
        }
    }       
}

上記の例外ブロックは以下の例外を提供します


org.springframework.amqp.AmqpAuthenticationException:com.rabbitmq.client.AuthenticationFailureException:ACCESS_REFUSED-認証メカニズムPLAINを使用してログインが拒否されました。詳細については、ブローカーのログファイルを参照してください。


エラーログ

  =ERROR REPORT==== 7-Nov-2014::18:04:37 ===
closing AMQP connection <0.489.0> (10.1.XX.2XX:52298 -> 10.1.XX.2XX:5672):
    {handshake_error,starting,0,
                     {amqp_error,access_refused,
                                 "PLAIN login refused: user 'guest' can only connect via localhost",
                                 'connection.start_ok'}}

Plsはpom.xmlエントリの下にあります

        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>1.3.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.integration</groupId>
            <artifactId>spring-integration-amqp</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>

考えや提案があれば教えてください

68
Javaboy

Artem Bilanが説明したことは確かです here はこのエラーの理由の1つかもしれません:

Caused by: com.rabbitmq.client.AuthenticationFailureException: 
ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. 
For details see the

しかし、私のための解決策は、guest/guestであるデフォルトのユーザー名とパスワードでrabbitMQ管理ページ( http:// localhost:15672 /#/ users )にログインし、新しいユーザーとその新しいユーザーに対して、仮想ホストからアクセスする権限を有効にし、デフォルトのゲストの代わりに新しいユーザー名とパスワードを使用し、エラーをクリアしました。

enter image description here

88
grepit

@ cpu-100 answer を完了するには、

webインターフェイスを有効化/使用したくない場合は、以下のようなコマンドラインを使用して新しい資格情報を作成し、それをコードで使用してRabbitMQに接続できます。

$ rabbitmqctl add_user YOUR_USERNAME YOUR_PASSWORD
$ rabbitmqctl set_user_tags YOUR_USERNAME administrator
$ rabbitmqctl set_permissions -p / YOUR_USERNAME ".*" ".*" ".*"
33
Rahman

ユーザー「ゲスト」はローカルホスト経由でのみ接続できます

それはRabbitMQ 3.3.x以降です。したがって、クライアントライブラリと同じバージョンにアップグレードするか、Spring AMQPを最新バージョンにアップグレードする必要があります(依存関係管理システムを使用する場合)。

クライアントの以前のバージョンは、HostConnectionFactoryオプションのデフォルト値として127.0.0.1を使用していました。

32
Artem Bilan

エラー

ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.

アプリケーションがRabbitMQへの接続に使用しようとしている資格情報が正しくないか、存在しない場合に発生する可能性があります。

ASP.NETアプリケーションのweb.configファイルに保存されているRabbitMQ資格情報が、実際のパスワード文字列値ではなく、パスワードの""の値を持っていたときに、この問題が発生しました。

6
Jon Schneider

ゲストアクセスをリモートで許可するには、これを記述します

[{rabbit, [{loopback_users, []}]}].

ここまで

c:\Users\[your user name]\AppData\Roaming\RabbitMQ\rabbitmq.config

その後、rabbitmq Windowsサービスを再起動します(ソース https://www.rabbitmq.com/access-control.html

4
Peter Szanto

新しいソリューション:

Nodeモジュールは、パスワード内の:を適切に処理できません。エンコードされたURLでも、正常に機能するように、機能しません。

パスワードのURLからの典型的な特殊文字を使用しないでください!

次のいずれか:: . ? + %


元の間違った答え:

このエラーメッセージは、PLAINの使用について明らかに不平を言っています。これは、クレデンシャルが間違っているという意味ではなく、プレーンテキストの代わりに暗号化データ配信(TLS)を使用する必要があることを意味します。

接続文字列のamqp://amqps://に変更すると(sに注意)、これは解決します。

1
Daniel W.

私にとって解決策は簡単でした。ユーザー名は大文字と小文字が区別されます。正しいキャップを使用しないと、エラーが発生します。

0