From 5b721530a2f86e19e3582f9a6f57aebb2bbceb70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A6=82=E6=A2=A6=E6=8A=80=E6=9C=AF?= <596392912@qq.com> Date: Fri, 24 Dec 2021 21:11:05 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=E6=A2=B3=E7=90=86=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E8=AE=B0=E5=BD=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../mqtt/core/server/auth/IMqttServerPublishPermission.java | 3 ++- .../mqtt/core/server/support/DefaultMqttServerProcessor.java | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b628ee7..7debdea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,8 @@ ### v1.2.2 - 2021-12-26 - :sparkles: mica-mqtt server 添加发布权限接口,无权限直接断开连接,避免高级别 qos 重试浪费资源。 - :sparkles: mica-mqtt-broker 优化节点信息存储 -- :sparkles: mqtt client 抽象 IMqttClientSession 接口。 +- :sparkles: mica-mqtt client 重复订阅优化。感谢 `@一片小雨滴` +- :sparkles: mica-mqtt client 抽象 IMqttClientSession 接口。 - :bug: 修复重构 AbstractMqttMessageDispatcher 保持跟 mica-mqtt-broker 逻辑一致 gitee #I4MA6A 感谢 `@胡萝博` - :arrow_up: mica-mqtt-example 升级 log4j2 到 2.17.0 diff --git a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/auth/IMqttServerPublishPermission.java b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/auth/IMqttServerPublishPermission.java index 369c934..3799f54 100644 --- a/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/auth/IMqttServerPublishPermission.java +++ b/mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/auth/IMqttServerPublishPermission.java @@ -33,8 +33,9 @@ public interface IMqttServerPublishPermission { * @param clientId 客户端 id * @param topic topic * @param qoS MqttQoS + * @param isRetain 是否保留消息 * @return 否有发布权限 */ - boolean hasPermission(ChannelContext context, String clientId, String topic, MqttQoS qoS); + boolean hasPermission(ChannelContext context, String clientId, String topic, MqttQoS qoS, boolean isRetain); } 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 0a7d36f..dd92c93 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 @@ -199,7 +199,7 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor { MqttPublishVariableHeader variableHeader = message.variableHeader(); String topicName = variableHeader.topicName(); // 1. 判断是否有发布权限,没有权限则断开 mqtt 连接 mqtt 5.x qos1、qos2 可以响应 reasonCode - if (publishPermission != null && !publishPermission.hasPermission(context, clientId, topicName, mqttQoS)) { + if (publishPermission != null && !publishPermission.hasPermission(context, clientId, topicName, mqttQoS, fixedHeader.isRetain())) { Tio.remove(context, "Mqtt clientId:" + clientId + " publish topic: " + topicName + " no permission."); return; } @@ -428,7 +428,7 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor { message.setPayload(payload); } message.setMessageType(MessageType.UP_STREAM); - message.setRetain(fixedHeader.isRetain()); + message.setRetain(isRetain); message.setDup(fixedHeader.isDup()); message.setTimestamp(System.currentTimeMillis()); Node clientNode = context.getClientNode(); -- GitLab