MQTT连接ONENET一直用户名密码错误

用MQTT连接OneNet时不要相信他给的token生成,不然会一直错误,得用给的算法自己跑

(搞了2小时!吐了!!!!!!)

在基于Netty搭建MQTT服务器时,可以通过以下步骤设置用户名密码: 1. 创建一个自定义的MqttAuthenticator类,并实现MqttAuthenticator接口。 2. 在MqttAuthenticator类中实现authenticate方法,该方法接收一个MqttConnectMessage对象和一个ChannelHandlerContext对象作为参数。 3. 在authenticate方法中,可以获取MqttConnectMessage对象中的用户名密码,并进行验证。 4. 如果用户名密码正确,则在ChannelHandlerContext对象中设置属性,以便后续的消息处理器可以获取这些属性。 5. 如果用户名密码不正确,则可以通过ChannelHandlerContext对象关闭连接。 以下是一个例子: ``` public class MyMqttAuthenticator implements MqttAuthenticator { @Override public void authenticate(MqttConnectMessage connectMessage, ChannelHandlerContext ctx, Promise<Void> promise) throws Exception { String username = connectMessage.payload().userName(); String password = connectMessage.payload().password(); if (isValidUsernameAndPassword(username, password)) { // 设置属性,以便后续的消息处理器可以获取这些属性 ctx.channel().attr(AttributeKey.valueOf("username")).set(username); ctx.channel().attr(AttributeKey.valueOf("password")).set(password); promise.setSuccess(null); } else { // 关闭连接 ctx.close(); promise.setFailure(new MqttConnectException(MqttConnectReturnCode.CONNECTION_REFUSED_BAD_USER_NAME_OR_PASSWORD)); } } private boolean isValidUsernameAndPassword(String username, String password) { // TODO: 验证用户名密码是否正确 return true; } } ``` 在MqttServerInitializer类中,可以将自定义的MqttAuthenticator类添加到MqttServerHandler类中: ``` public class MqttServerInitializer extends ChannelInitializer<SocketChannel> { @Override protected void initChannel(SocketChannel ch) throws Exception { MqttServer mqttServer = new MqttServer(); MqttServerHandler mqttHandler = new MqttServerHandler(mqttServer); mqttHandler.setAuthenticator(new MyMqttAuthenticator()); // 添加自定义的MqttAuthenticator类 ch.pipeline().addLast(new MqttDecoder(), new MqttEncoder(), mqttHandler); } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值