在java上试图使用org.eclipse.paho.client.mqttv3连接连接本地部署的emq,emqx服务端的认证配置如下
org.eclipse.paho.client.mqttv3.MqttSecurityException: 错误的用户名或密码 at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:28) at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:1053) at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:151) at java.base/java.lang.Thread.run(Thread.java:840)
我在mqttx的mqtt协议调试软件上确定了"emqx_test"和"emqx_test_password"的用户名密码时没有问题的
截图:
相关java设置代码
var brokerUrl="tcp://127.0.0.1:1883";mqttClient = new MqttAsyncClient(brokerUrl, "test");MqttConnectOptions connOpts = new MqttConnectOptions();connOpts.setUserName("emqx_test");connOpts.setPassword("emqx_test_password".toCharArray());connOpts.setServerURIs(new String[] { brokerUrl });connOpts.setCleanSession(true);// 设置回调函数mqttClient.connect(connOpts, connStatus);
连接失败回调代码,连接总是响应REASON_CODE_FAILED_AUTHENTICATION的状态码
@Override public void onFailure(IMqttToken asyncActionToken, Throwable e) { // System.out.println("Failed to connect to the broker: " + // exception.getMessage()); if (e instanceof MqttException) { MqttException mqttEx = (MqttException) e; int reasonCode = mqttEx.getReasonCode(); if (reasonCode == MqttException.REASON_CODE_CLIENT_TIMEOUT) { log.error("mqtt连接失败,等待超时"); } else if (reasonCode == MqttException.REASON_CODE_FAILED_AUTHENTICATION) { log.error("连接失败,认证无效:",e); } else { System.out.println("Other connection failure reason: " + reasonCode); } } else { log.error("连接失败", e); } }
请问问题出在哪里?
我把emqx上的内置数据库认证功能关了,java的mqtt连接就能成功了。然后打开emqx网站,进入客户端那一页面查看连接的客户端,在用户名那一列发现java的mqtt客户端缺少用户名,是MqttConnectOptions配置缺失了什么东西吗?
emqx测试的版本是emqx-5.3.2-windows-amd64
自己解决了,是要把"mqttClient.connect(connOpts, connStatus);"这段代码,改成如下的代码,才会启用用户名认证进行连接
mqttClient.connect(connOpts, null,connStatus)
效果反馈截图
问题内容: 我在应用程序中使用MongoDB 3.2。下面的代码演示了数据库初始化逻辑: 这段代码工作正常,现在我想向数据库引入访问级别分离。 步骤如下: 定义用户: 重新创建认证模式MongoDB的3.2服务: 。并运行它。 将连接字符串更改为 其中= 和= 。 使用相同的凭据检查IDEA中已验证的连接,一切正常。 执行我的应用程序并获取异常。 我的问题: 如何使用用户名和密码连接Java中的M
如何初始化SDK并且让基本的用户名密码认证成功 通过阅读此文档,您可以完成用户密码登录认证,并成功启动VPN SDK 此文档默认已经集成SDK并且工程可以编译通过运行 您完全可以参考demo(特别是 AuthViewController.m)进行代码编写,但此文档仍然列出了必要的步骤 此文档只是参考,您应该根据具体需求因地适宜 此文档会略过如头文件import等基本概念与步骤,只介绍重要的概念 在
我正在使用8.5.0运行时服务器运行我的项目,在部署期间,我发现以下错误 这里是配置。引用密钥存储的xml文件。资源目录中的jks文件
警告:mysqli::mysqli():(HY000/1045):拒绝访问/home/domainname/public_html/autopublish/test.php中的用户'usernam'@'localhost'(使用密码:YES)。第8行连接失败:拒绝访问用户'usernam'@'localhost'(使用密码:YES)
我正在尝试使用内联编辑器重新部署一个以前工作的Python云函数。不改变来源或要求。txt,部署失败,错误消息如下: 功能日志提供以下详细信息: 这种情况从上周五开始,一直持续到今天。我还尝试了使用gcloud函数进行本地部署,在部署时我收到了类似的错误消息:
问题内容: 我正在开发客户端/服务器身份验证程序,但是遇到了问题。客户端可以很好地与服务器建立连接,但是一旦我输入密码和用户名,它就不会返回有效的用户名/密码。如果用户使用正确的用户名/密码服务器登录,则应返回“ Welcome,username”,如果无效,则返回“登录失败”。我查看了printwriter和bufferedreader文档,以确保我使用正确的方法在服务器/客户端之间正确传递文本