因为我不需要考虑应用程序中的安全问题,所以我希望使用Java客户端连接到RabbitMQ而无需密码。
在管理界面中,我将用户密码设置为“无密码”。然后我就这样试了:
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
factory.setUsername("myuser");
connection = factory.newConnection();
或者,我尝试手工组装URI:
factory.setUri("amqp://myuser@localhost:5672");
...但在这两种情况下,身份验证都会失败并出现此异常:
Exception in thread "main" com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.
at com.rabbitmq.client.impl.AMQConnection.start(AMQConnection.java:339)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:716)
at com.rabbitmq.client.ConnectionFactory.newConnection(ConnectionFactory.java:760)
at de.bmw.rabbitmq.workerqueue.Producer2.main(Producer2.java:51)
甚至可以在没有密码的情况下获得连接吗?
答案 0 :(得分:3)
无密码身份验证可以通过使用如下所述的rabbitmq-auth-mechanism-ssl来实现:https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl。这要求SSL / TLS支持已设置并正常工作。如果选择此选项,则使用受信任的根证书进行身份验证,并且完全忽略任何用户名/密码。
我目前正在调查是否可以与LDAP一起进行无密码身份验证,但我没有运气这么做。
编辑:在我的环境中,Windows服务使用基于证书的身份验证进行身份验证,RabbitMQ群集管理员可以使用LDAP对管理Web UI进行身份验证。如果您对LDAP身份验证感兴趣,请here's another post about it。
答案 1 :(得分:1)
因为我不需要在我的应用程序中考虑安全问题
我会严重质疑这个假设。事实上,我甚至会说这永远不正确。
话虽如此:
只需使用任何人都可以知道的简单密码。这样做比在没有密码的情况下尝试让RMQ工作更容易。
答案 2 :(得分:-1)
完成此问题。正如Derick Bailey所建议的那样:我通过为不同的客户引入(默认)凭证来帮助自己。