diff --git a/mica-mqtt-broker/src/main/java/net/dreamlu/iot/mqtt/broker/auth/MqttPublishPermission.java b/mica-mqtt-broker/src/main/java/net/dreamlu/iot/mqtt/broker/auth/MqttPublishPermission.java index e5712a3043a7070b6615e7c06bf30b26d2ca17bc..a70934f550bf2dfdc7f57e1cb8e1522c4f6b6515 100644 --- a/mica-mqtt-broker/src/main/java/net/dreamlu/iot/mqtt/broker/auth/MqttPublishPermission.java +++ b/mica-mqtt-broker/src/main/java/net/dreamlu/iot/mqtt/broker/auth/MqttPublishPermission.java @@ -41,6 +41,7 @@ public class MqttPublishPermission implements IMqttServerPublishPermission { * @param isRetain 是否保留消息 * @return 否有发布权限 */ + @Override public boolean hasPermission(ChannelContext context, String clientId, String topic, MqttQoS qoS, boolean isRetain) { log.info("Mqtt client publish permission check clientId:{} topic:{}.", clientId, topic); // 可自定义业务,判断客户端是否有发布的权限。 diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java index 21ff6bb6d176bd0aaa55e55b90990495dcac2115..88afcd7e30c6d0b6ce61114af4273d7c4f8e88b0 100644 --- a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java +++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java @@ -204,9 +204,9 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor { MqttQoS mqttQoS = fixedHeader.qosLevel(); MqttPublishVariableHeader variableHeader = message.variableHeader(); String topicName = variableHeader.topicName(); - // 1. 判断是否有发布权限,没有权限则断开 mqtt 连接 mqtt 5.x qos1、qos2 可以响应 reasonCode + // 1. 权限判断,在 MQTT v3.1 和 v3.1.1 协议中,发布操作被拒绝后服务器无任何报文错误返回,这是协议设计的一个缺陷。但在 MQTT v5.0 协议上已经支持应答一个相应的错误报文。 if (publishPermission != null && !publishPermission.verifyPermission(context, clientId, topicName, mqttQoS, fixedHeader.isRetain())) { - Tio.remove(context, "Mqtt clientId:" + clientId + " publish topic: " + topicName + " no permission."); + logger.error("Mqtt clientId:{} topic:{} no publish permission.", clientId, topicName); return; } // 2. 处理发布逻辑