Spring AMQP + RabbitMQ 3.3.5 ACCESS_REFUSED - การเข้าสู่ระบบถูกปฏิเสธโดยใช้กลไกการตรวจสอบความถูกต้อง PLAIN


94

ฉันได้รับข้อยกเว้นต่ำกว่า

org.springframework.amqp.AmqpAuthenticationException: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - การเข้าสู่ระบบถูกปฏิเสธโดยใช้กลไกการพิสูจน์ตัวตน PLAIN สำหรับรายละเอียดโปรดดูไฟล์บันทึกของนายหน้า

การกำหนดค่า: RabbitMQ 3.3.5 บน windows

ในไฟล์ Config ใน%APPDATA%\RabbitMQ\rabbit.config ฉันได้ทำการเปลี่ยนแปลงด้านล่างตามhttps://www.rabbitmq.com/access-control.html

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

ฉันลองสร้าง user / pwd ด้วย - test / test ดูเหมือนจะไม่ได้ผล

พยายามขั้นตอนจากนี้โพสต์

รายละเอียดการกำหนดค่าอื่น ๆ มีดังต่อไปนี้:

Tomcat โฮสต์ Spring Application Context:

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

โปรดค้นหาด้านล่างรายการ 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>

โปรดแจ้งให้เราทราบหากคุณมีความคิดเห็น / ข้อเสนอแนะ


ตรวจสอบให้แน่ใจว่าได้โหลด config ที่คุณแก้ไขแล้ว
pinepain

zaq178miami ฉันได้ทำสองสามขั้นตอนเพื่อให้แน่ใจว่าโหลดแล้ว เริ่มบริการใหม่บูตเครื่องใหม่และติดตั้ง RabbitMQ อีกครั้ง
Javaboy

คำตอบ:


108

ฉันแน่ใจว่าสิ่งที่ 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 / # / ผู้ใช้ ) ด้วยชื่อผู้ใช้และรหัสผ่านเริ่มต้นซึ่งเป็นแขก / แขกจากนั้นเพิ่มผู้ใช้ใหม่และสำหรับผู้ใช้ใหม่นั้นฉัน เปิดใช้งานสิทธิ์ในการเข้าถึงจากโฮสต์เสมือนจากนั้นใช้ชื่อผู้ใช้และรหัสผ่านใหม่แทนผู้เยี่ยมชมเริ่มต้นและนั่นเป็นการล้างข้อผิดพลาด

ป้อนคำอธิบายภาพที่นี่


3
มันไม่ได้ผลสำหรับฉันเช่นกัน การเชื่อมต่อกับแขก: แขกสบายดี การเชื่อมต่อกับ newUser: newPwd ให้ข้อผิดพลาดนี้ ไม่รู้ทำไม !!
Shashank

1
ผมมีปัญหาเหมือนกัน. การปฏิบัติตามคำแนะนำนี้จะช่วยแก้ปัญหานี้ได้
Christian Del Bianco

46

ให้เสร็จสมบูรณ์ @ CPU-100 คำตอบ ,

ในกรณีที่คุณไม่ต้องการเปิด / ใช้งานเว็บอินเตอร์เฟสคุณสามารถสร้างข้อมูลประจำตัวใหม่โดยใช้บรรทัดคำสั่งด้านล่างและใช้ในรหัสของคุณเพื่อเชื่อมต่อกับ RabbitMQ

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

2
ขอบคุณฉันไม่มีประสบการณ์กับ RabbitMQ และนี่เป็นวิธีแก้ปัญหาอย่างรวดเร็วในการเชื่อมต่อระยะไกลไปยังเซิร์ฟเวอร์ที่นำมาจาก AWS AMI เพื่อทดลองเพื่อดูว่าฉันควรตรวจสอบเพิ่มเติมหรือไม่
jbm

36

ผู้ใช้ 'guest' สามารถเชื่อมต่อผ่าน localhost เท่านั้น

นั่นเป็นความจริงตั้งแต่ RabbitMQ 3.3.x. ดังนั้นคุณควรอัปเกรดไลบรารีไคลเอ็นต์เป็นเวอร์ชันเดียวกันหรือเพียงอัปเกรด Spring AMQP เป็นเวอร์ชันล่าสุด (หากคุณใช้ระบบการจัดการการพึ่งพา)

เวอร์ชันก่อนหน้าของไคลเอนต์ที่ใช้127.0.0.1เป็นค่าเริ่มต้นสำหรับhostตัวเลือกของConnectionFactory.


สวัสดี Artem ฉันได้เพิ่มรายการ pom.xml สำหรับเวอร์ชันของ jar ตามหลักการแล้วฉันต้องการหลีกเลี่ยงการใช้ชื่อผู้ใช้และรหัสผ่านของแขก คุณช่วยแจ้งให้เราทราบได้ไหมว่าคุณมีตัวชี้ใด ๆ ที่สามารถใช้งานได้สำหรับแนวคิด Prod Ready Use Case / Proof of concept ใน senario ข้างต้น
Javaboy

ขออภัยไม่ชัดเจนว่าคุณหมายถึงอะไรเกี่ยวกับ "prod ready Use Case / Proof of concept ในด้านบน senario` เพราะฉันไม่เห็นคำถามกรณีการใช้งานใด ๆ ที่นี่ อย่าลังเลที่จะสร้างผู้ใช้ใด ๆ บนโบรกเกอร์ RabbitMQ
Artem Bilan

วิธีแก้ไขง่ายๆคือระบุlocalhostดังนี้ConnectionFactory("localhost")
Brent Bradburn

สำหรับ azure UbuntuVM พร้อมกับ ip ที่กำหนด azure guest/guestบัญชีทำงานได้ทั่วโลก! :(
Dev Anand Sadasivam

14

ความผิดพลาด

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

อาจเกิดขึ้นได้หากข้อมูลรับรองที่แอปพลิเคชันของคุณพยายามใช้เพื่อเชื่อมต่อกับ RabbitMQ ไม่ถูกต้องหรือขาดหายไป

ฉันเคยเกิดขึ้นเมื่อข้อมูลรับรอง RabbitMQ ที่เก็บไว้ในweb.configไฟล์แอปพลิเคชัน ASP.NET ของฉันมีค่า""สำหรับรหัสผ่านแทนที่จะเป็นค่าสตริงรหัสผ่านจริง


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

ฉันประสบปัญหานี้เนื่องจากมีพื้นที่ว่างที่ส่วนท้ายของรหัสผ่าน (spring.rabbitmq.password = rabbit) ในแอปพลิเคชัน spring boot คุณสมบัติได้รับการแก้ไขในการลบพื้นที่ว่าง หวังว่ารายการตรวจสอบนี้จะช่วยให้ผู้ประสบปัญหานี้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.