Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - Die Anmeldung wurde mithilfe des Authentifizierungsmechanismus PLAIN abgelehnt


92

Ich komme unter die Ausnahme

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Die Anmeldung wurde mithilfe des Authentifizierungsmechanismus PLAIN abgelehnt. Einzelheiten finden Sie in der Broker-Protokolldatei.

Konfiguration: RabbitMQ 3.3.5 unter Windows

In der Konfigurationsdatei in habe %APPDATA%\RabbitMQ\rabbit.config ich unten Änderungen gemäß https://www.rabbitmq.com/access-control.html vorgenommen

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

Ich habe auch versucht, einen Benutzer / pwd zu erstellen - test / test scheint nicht zu funktionieren.

Versuchte die Schritte daraus Beitrag.

Weitere Konfigurationsdetails sind wie folgt:

Von Tomcat gehosteter Spring-Anwendungskontext:

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

In meiner Controller-Klasse

@Autowired
RmqMessageSender rmqMessageSender;

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

In Absender meiner Nachricht:

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());
        }
    }       
}

Über der Ausnahme Block gibt unten Ausnahme


org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Die Anmeldung wurde mithilfe des Authentifizierungsmechanismus PLAIN abgelehnt. Einzelheiten finden Sie in der Broker-Protokolldatei.


Fehlerprotokoll

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

Bitte finden Sie unter dem Eintrag 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>

Bitte lassen Sie mich wissen, wenn Sie irgendwelche Gedanken / Vorschläge haben


Stellen Sie sicher, dass die von Ihnen bearbeitete Konfiguration geladen ist.
Pinepain

zaq178miami, ich habe ein paar Schritte gemacht, um sicherzustellen, dass es geladen ist. Starten Sie den Dienst neu, starten Sie den Computer neu und installieren Sie sogar den RabbitMQ neu.
Javaboy

Antworten:


104

Ich bin sicher, was Artem Bilan hier erklärt hat, könnte einer der Gründe für diesen Fehler sein:

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

Die Lösung für mich war jedoch, dass ich mich auf der rabbitMQ-Administrationsseite ( http: // localhost: 15672 / # / users ) mit dem Standardbenutzernamen und -kennwort (guest / guest) angemeldet habe und dann einen neuen Benutzer und für diesen neuen Benutzer I hinzugefügt habe hat die Berechtigung für den Zugriff vom virtuellen Host aus aktiviert und dann den neuen Benutzernamen und das neue Kennwort anstelle des Standardgastes verwendet. Dadurch wurde der Fehler behoben.

Geben Sie hier die Bildbeschreibung ein


2
Es funktioniert auch nicht für mich. Verbindung mit Gast: Gast ist in Ordnung. Verbindung mit newUser: newPwd gibt diesen Fehler aus. Keine Ahnung warum !!
Shashank

1
Ich hatte das gleiche Problem. Nach diesem Vorschlag wurde dieses Problem gelöst.
Christian Del Bianco

40

Um die Antwort auf @ cpu-100 zu vervollständigen ,

Falls Sie die Weboberfläche nicht aktivieren / verwenden möchten, können Sie mithilfe der folgenden Befehlszeile neue Anmeldeinformationen erstellen und diese in Ihrem Code verwenden, um eine Verbindung zu RabbitMQ herzustellen.

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

1
Vielen Dank, ich habe keine Erfahrung mit RabbitMQ, und dies war eine schnelle Lösung, um eine Remoteverbindung zu einem Server herzustellen, der von einem AWS AMI aufgerufen wurde, um zu experimentieren, ob ich mich weiter damit befassen sollte.
jbm

36

Benutzer 'Gast' kann nur über localhost eine Verbindung herstellen

Das stimmt seit RabbitMQ 3.3.x. Daher sollten Sie die Clientbibliothek auf dieselbe Version aktualisieren oder Spring AMQP einfach auf die neueste Version aktualisieren (wenn Sie das Abhängigkeitsmanagentsystem verwenden).

Vorherige Version des Clients, die 127.0.0.1als Standardwert für die hostOption verwendet wurde ConnectionFactory.


Hallo Artem, ich habe den Eintrag pom.xml für Versionen von jar hinzugefügt. Idealerweise möchte ich mich von der Verwendung des Gastbenutzernamens und des Passworts fernhalten. Könnten Sie mich bitte wissen lassen, ob Sie Hinweise haben, die für einen prod Ready Use Case / Proof of Concept im obigen Szenario verwendet werden können?
Javaboy

Es tut uns leid, es ist nicht klar, was Sie mit "prod ready Use Case / Proof of Concept im obigen Szenario" meinen, da ich hier keine Use-Case-Fragen sehe. Fühlen Sie sich frei, jeden Benutzer auf dem RabbitMQ Broker zu erstellen.
Artem Bilan

Die einfache Lösung besteht darin, localhostConnectionFactory("localhost")
Folgendes

Für Azure UbuntuVM funktioniert das mit Azure zugewiesene IP- guest/guestKonto global! :(
Dev Anand Sadasivam

13

Der Fehler

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

kann auftreten, wenn die Anmeldeinformationen, mit denen Ihre Anwendung versucht, eine Verbindung zu RabbitMQ herzustellen, falsch sind oder fehlen.

Dies geschah, als die in der web.configDatei meiner ASP.NET-Anwendung gespeicherten RabbitMQ-Anmeldeinformationen ""anstelle des tatsächlichen Kennwortzeichenfolgenwerts den Wert für das Kennwort hatten.


1
Ja - Achten Sie auf Tippfehler. :-)
Sundar Annamalai


3

Für mich war die Lösung einfach: Der Benutzername unterscheidet zwischen Groß- und Kleinschreibung. Wenn Sie nicht die richtigen Kappen verwenden, führt dies ebenfalls zu dem Fehler.


2

Neue Lösung:

Das Knotenmodul kann :ein Kennwort nicht richtig verarbeiten. Selbst URL-codiert, wie es normal funktionieren würde, funktioniert es nicht.

Verwenden Sie keine typischen Sonderzeichen aus einer URL im Passwort!

Wie einer der folgenden: : . ? + %


Ursprüngliche, falsche Antwort:

Die Fehlermeldung beschwert sich eindeutig über die Verwendung. PLAINDies bedeutet nicht, dass die Anmeldeinformationen falsch sind. Sie müssen die verschlüsselte Datenübermittlung (TLS) anstelle von Klartext verwenden.

Das Ändern amqp://der Verbindungszeichenfolge in amqps://(beachten Sie das s) löst dieses Problem.


2

Fügen Sie einfach das Anmeldekennwort hinzu, um eine Verbindung zu RabbitMq herzustellen

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

 connectionFactory.setUsername("login");
 connectionFactory.setPassword("password");

2

Wenn Sie die Nummer als Passwort verwenden, sollten Sie möglicherweise versuchen, Ihr Passwort mithilfe einer Zeichenfolge zu ändern.

Ich kann mich mit deltaqin: 000000 auf der Website anmelden, hatte dies aber beim Ausführen des Programms. Ändern Sie dann das Passwort in deltaiqn. und es funktioniert.


0

Ich habe genau das gemacht, was @grepit gemacht hat.

Aber ich musste einige Änderungen an meinem Java-Code vornehmen:

Im Producer and Receiver-Projekt habe ich Folgendes geändert:

ConnectionFactory factory = new ConnectionFactory();
factory.setHost("your-host-ip");
factory.setUsername("username-you-created");
factory.setPassword("username-password");

        

Auf diese Weise verbinden Sie einen bestimmten Host als den von Ihnen erstellten Benutzer. Für mich geht das!


0

Ich hatte dieses Problem aufgrund eines leeren Speicherplatzes am Ende des Kennworts (spring.rabbitmq.password = rabbit) in der Spring-Boot-Anwendung. Die Eigenschaften wurden beim Entfernen des leeren Speicherplatzes behoben. Hoffe, diese Checkliste hilft jemandem, der mit diesem Problem konfrontiert ist.


-3

Setzen Sie ConnectionFactory oder Connection Hostname auf localhost

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.