Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED-인증 메커니즘 PLAIN을 사용하여 로그인이 거부되었습니다.


94

나는 예외를 받고있다

org.springframework.amqp.AmqpAuthenticationException : com.rabbitmq.client.AuthenticationFailureException : ACCESS_REFUSED-인증 메커니즘 PLAIN을 사용하여 로그인이 거부되었습니다. 자세한 내용은 브로커 로그 파일을 참조하십시오.

구성 : Windows의 RabbitMQ 3.3.5

의 구성 파일에서 https://www.rabbitmq.com/access-control.html에%APPDATA%\RabbitMQ\rabbit.config 따라 아래 변경을 수행했습니다.

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

또한 사용자 / 비밀번호를 만들려고 시도했습니다. 테스트 / 테스트가 작동하지 않는 것 같습니다.

게시물 의 단계를 시도했습니다 .

기타 구성 세부 정보는 다음과 같습니다.

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>

의견이나 제안이 있으면 알려주십시오.


편집 한 구성이로드되었는지 확인하십시오.
pinepain 2014

zaq178miami,로드되었는지 확인하기 위해 몇 가지 단계를 수행했습니다. 서비스를 다시 시작하고 머신을 다시 부팅하고 RabbitMQ를 다시 설치하십시오.
Javaboy

답변:


106

Artem Bilan이 여기에서 설명한 것이이 오류의 원인 중 하나 일 수 있습니다.

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

하지만 나를위한 해결책 은 게스트 / 게스트 인 기본 사용자 이름과 암호 로 rabbitMQ 관리 페이지 ( http : // localhost : 15672 / # / users )에 로그인 한 다음 새 사용자를 추가하고 해당 새 사용자를 위해 I 가상 호스트에서 액세스 할 수있는 권한을 활성화 한 다음 기본 게스트 대신 새 사용자 이름과 암호를 사용하여 오류를 해결했습니다.

여기에 이미지 설명 입력


3
나에게도 효과가 없습니다. guest : guest와의 연결은 괜찮습니다. newUser : newPwd와 연결하면이 오류가 발생합니다. 왜 그런지 모르겠어요 !!
Shashank

1
나는 같은 문제가 있었다. 이 제안에 따라이 문제가 해결되었습니다.
Christian Del Bianco

45

@ cpu-100 답변 을 완료하려면 ,

웹 인터페이스를 활성화 / 사용하지 않으려는 경우 아래와 같은 명령 줄을 사용하여 새 자격 증명을 생성하고이를 코드에서 사용하여 RabbitMQ에 연결할 수 있습니다.

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

1
감사합니다. 저는 RabbitMQ에 대한 경험이 없습니다. 이것은 AWS AMI에서 가져온 서버에 대한 원격 연결을 가져 와서 더 자세히 조사해야하는지 확인하기위한 빠른 솔루션이었습니다.
jbm

36

사용자 'guest'는 localhost를 통해서만 연결할 수 있습니다.

RabbitMQ 3.3.x 이후로 사실입니다. 따라서 클라이언트 라이브러리와 동일한 버전으로 업그레이드하거나 Spring AMQP를 최신 버전으로 업그레이드해야합니다 (종속성 관리 시스템을 사용하는 경우).

127.0.0.1host옵션에 대한 기본값으로 사용 된 이전 버전의 클라이언트 ConnectionFactory.


안녕하세요 Artem, jar 버전에 대한 pom.xml 항목을 추가했습니다. 이상적으로는 게스트 사용자 이름 및 암호를 사용하지 않으려 고합니다. 위의 시나리오에서 prod ready Use Case / Proof of concept에 사용할 수있는 포인터가 있으면 알려주세요.
Javaboy

죄송합니다. 여기에 사용 사례 질문이 표시되지 않았기 때문에`prod ready Use Case / Proof of concept in above senario`에 대한 의미가 명확하지 않습니다. RabbitMQ 브로커에서 모든 사용자를 자유롭게 생성하십시오.
Artem Bilan 2014

간단한 해결책은 다음 localhost과 같이 지정하는 것입니다.ConnectionFactory("localhost")
Brent Bradburn 2018 년

azure UbuntuVM의 경우 azure 할당 된 ip guest/guest계정이 전역 적으로 작동합니다! :(
Dev Anand Sadasivam

13

오류

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

애플리케이션이 RabbitMQ에 연결하는 데 사용하려는 자격 증명이 올바르지 않거나 누락 된 경우 발생할 수 있습니다.

ASP.NET 응용 프로그램의 web.config파일에 저장된 RabbitMQ 자격 증명에 ""실제 암호 문자열 값 대신 암호 값 이있을 때 이런 일이 발생했습니다 .


1
예-오타에주의하십시오. :-)
Sundar Annamalai

6

게스트 액세스를 원격으로 허용하려면 다음을 작성하십시오.

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

여기로

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

그런 다음 rabbitmq Windows 서비스를 다시 시작하십시오 (출처 https://www.rabbitmq.com/access-control.html )


3

저에게 해결책은 간단했습니다. 사용자 이름은 대소 문자를 구분합니다. 올바른 대문자를 사용하지 않으면 오류가 발생합니다.


2

새로운 솔루션 :

노드 모듈 :이 암호를 제대로 처리 할 수 ​​없습니다 . 정상적으로 작동하는 것처럼 URL로 인코딩 된 경우에도 작동하지 않습니다.

암호에 URL의 일반적인 특수 문자를 사용하지 마십시오!

다음 중 하나와 같습니다. : . ? + %


원본, 오답 :

오류 메시지 PLAIN는를 사용하는 것에 대해 분명히 불평 합니다. 이는 자격 증명이 잘못되었음을 의미하는 것이 아니라 일반 텍스트 대신 암호화 된 데이터 전송 (TLS)을 사용해야 함을 의미합니다.

amqp://연결 문자열을 amqps://(참고 s) 로 변경하면 이 문제가 해결됩니다.


2

RabbitMq에 연결하려면 로그인 암호를 추가하십시오.

 CachingConnectionFactory connectionFactory = 
         new CachingConnectionFactory("rabbit_host");

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

2

번호를 비밀번호로 사용하는 경우 문자열을 사용하여 비밀번호를 변경해야 할 수도 있습니다.

웹 사이트에서 deltaqin : 000000을 사용하여 로그인 할 수 있지만 프로그램을 실행하는 동안이 문제가있었습니다. 그런 다음 암호를 deltaiqn으로 변경하십시오. 그리고 그것은 작동합니다.


0

@grepit이 만든 것을 정확히 만들었습니다.

하지만 Java 코드를 약간 변경해야했습니다.

Producer and Receiver 프로젝트에서 다음을 변경했습니다.

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

        

이렇게하면 생성 한 사용자로 특정 호스트에 연결됩니다. 그것은 나를 위해 작동합니다!


0

나는 봄 부팅 application.properties의 암호 (spring.rabbitmq.password = rabbit) 끝에 빈 공간으로 인해이 문제에 직면하여 빈 공간을 제거하면 해결되었습니다. 이 체크리스트가이 문제에 직면 한 사람에게 도움이되기를 바랍니다.


-4

ConnectionFactory 또는 Connection 호스트 이름을 localhost로 설정하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.