Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
mica
mica-mqtt
提交
a37f17b5
mica-mqtt
项目概览
mica
/
mica-mqtt
通知
71
Star
1
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
mica-mqtt
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
a37f17b5
编写于
12月 23, 2021
作者:
浅梦2013
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
mica-mqtt server 添加发布权限接口。
上级
698fe55f
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
71 addition
and
1 deletion
+71
-1
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/MqttServerCreator.java
...a/net/dreamlu/iot/mqtt/core/server/MqttServerCreator.java
+14
-0
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/auth/IMqttServerPublishPermission.java
...t/mqtt/core/server/auth/IMqttServerPublishPermission.java
+40
-0
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java
.../mqtt/core/server/support/DefaultMqttServerProcessor.java
+13
-1
mica-mqtt-spring-boot-starter/src/main/java/net/dreamlu/iot/mqtt/spring/server/MqttServerConfiguration.java
...eamlu/iot/mqtt/spring/server/MqttServerConfiguration.java
+4
-0
未找到文件。
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/MqttServerCreator.java
浏览文件 @
a37f17b5
...
...
@@ -19,6 +19,7 @@ package net.dreamlu.iot.mqtt.core.server;
import
net.dreamlu.iot.mqtt.codec.ByteBufferAllocator
;
import
net.dreamlu.iot.mqtt.codec.MqttConstant
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerAuthHandler
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerPublishPermission
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerSubscribeValidator
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerUniqueIdService
;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.AbstractMqttMessageDispatcher
;
...
...
@@ -100,6 +101,10 @@ public class MqttServerCreator {
* 订阅校验器
*/
private
IMqttServerSubscribeValidator
subscribeValidator
;
/**
* 发布权限校验
*/
private
IMqttServerPublishPermission
publishPermission
;
/**
* 消息处理器
*/
...
...
@@ -277,6 +282,15 @@ public class MqttServerCreator {
return
this
;
}
public
IMqttServerPublishPermission
getPublishPermission
()
{
return
publishPermission
;
}
public
MqttServerCreator
publishPermission
(
IMqttServerPublishPermission
publishPermission
)
{
this
.
publishPermission
=
publishPermission
;
return
this
;
}
public
IMqttMessageDispatcher
getMessageDispatcher
()
{
return
messageDispatcher
;
}
...
...
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/auth/IMqttServerPublishPermission.java
0 → 100644
浏览文件 @
a37f17b5
/*
* Copyright (c) 2019-2029, Dreamlu 卢春梦 (596392912@qq.com & dreamlu.net).
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
net.dreamlu.iot.mqtt.core.server.auth
;
import
net.dreamlu.iot.mqtt.codec.MqttQoS
;
import
org.tio.core.ChannelContext
;
/**
* mqtt 服务端校验客户端是否有发布权限
*
* @author L.cm
*/
public
interface
IMqttServerPublishPermission
{
/**
* 否有发布权限
*
* @param context ChannelContext
* @param clientId 客户端 id
* @param topic topic
* @param qoS MqttQoS
* @return 否有发布权限
*/
boolean
hasPermission
(
ChannelContext
context
,
String
clientId
,
String
topic
,
MqttQoS
qoS
);
}
mica-mqtt-core/src/main/java/net/dreamlu/iot/mqtt/core/server/support/DefaultMqttServerProcessor.java
浏览文件 @
a37f17b5
...
...
@@ -23,6 +23,7 @@ import net.dreamlu.iot.mqtt.core.server.MqttConst;
import
net.dreamlu.iot.mqtt.core.server.MqttServerCreator
;
import
net.dreamlu.iot.mqtt.core.server.MqttServerProcessor
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerAuthHandler
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerPublishPermission
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerSubscribeValidator
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerUniqueIdService
;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher
;
...
...
@@ -51,6 +52,10 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
*/
public
class
DefaultMqttServerProcessor
implements
MqttServerProcessor
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
DefaultMqttServerProcessor
.
class
);
/**
* 默认的超时时间
*/
private
static
final
long
DEFAULT_HEARTBEAT_TIMEOUT
=
120_000L
;
/**
* 2 倍客户端 keepAlive 时间
*/
...
...
@@ -61,6 +66,7 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor {
private
final
IMqttServerAuthHandler
authHandler
;
private
final
IMqttServerUniqueIdService
uniqueIdService
;
private
final
IMqttServerSubscribeValidator
subscribeValidator
;
private
final
IMqttServerPublishPermission
publishPermission
;
private
final
IMqttMessageDispatcher
messageDispatcher
;
private
final
IMqttConnectStatusListener
connectStatusListener
;
private
final
IMqttMessageListener
messageListener
;
...
...
@@ -68,12 +74,13 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor {
private
final
ScheduledThreadPoolExecutor
executor
;
public
DefaultMqttServerProcessor
(
MqttServerCreator
serverCreator
,
ScheduledThreadPoolExecutor
executor
)
{
this
.
heartbeatTimeout
=
serverCreator
.
getHeartbeatTimeout
()
==
null
?
120_000L
:
serverCreator
.
getHeartbeatTimeout
();
this
.
heartbeatTimeout
=
serverCreator
.
getHeartbeatTimeout
()
==
null
?
DEFAULT_HEARTBEAT_TIMEOUT
:
serverCreator
.
getHeartbeatTimeout
();
this
.
messageStore
=
serverCreator
.
getMessageStore
();
this
.
sessionManager
=
serverCreator
.
getSessionManager
();
this
.
authHandler
=
serverCreator
.
getAuthHandler
();
this
.
uniqueIdService
=
serverCreator
.
getUniqueIdService
();
this
.
subscribeValidator
=
serverCreator
.
getSubscribeValidator
();
this
.
publishPermission
=
serverCreator
.
getPublishPermission
();
this
.
messageDispatcher
=
serverCreator
.
getMessageDispatcher
();
this
.
connectStatusListener
=
serverCreator
.
getConnectStatusListener
();
this
.
messageListener
=
serverCreator
.
getMessageListener
();
...
...
@@ -191,6 +198,11 @@ public class DefaultMqttServerProcessor implements MqttServerProcessor {
MqttQoS
mqttQoS
=
fixedHeader
.
qosLevel
();
MqttPublishVariableHeader
variableHeader
=
message
.
variableHeader
();
String
topicName
=
variableHeader
.
topicName
();
// 1. 判断是否有发布权限
if
(
publishPermission
!=
null
&&
!
publishPermission
.
hasPermission
(
context
,
clientId
,
topicName
,
mqttQoS
))
{
return
;
}
// 2. 处理发布逻辑
int
packetId
=
variableHeader
.
packetId
();
logger
.
debug
(
"Publish - clientId:{} topicName:{} mqttQoS:{} packetId:{}"
,
clientId
,
topicName
,
mqttQoS
,
packetId
);
switch
(
mqttQoS
)
{
...
...
mica-mqtt-spring-boot-starter/src/main/java/net/dreamlu/iot/mqtt/spring/server/MqttServerConfiguration.java
浏览文件 @
a37f17b5
...
...
@@ -19,6 +19,7 @@ package net.dreamlu.iot.mqtt.spring.server;
import
net.dreamlu.iot.mqtt.core.server.MqttServer
;
import
net.dreamlu.iot.mqtt.core.server.MqttServerCreator
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerAuthHandler
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerPublishPermission
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerSubscribeValidator
;
import
net.dreamlu.iot.mqtt.core.server.auth.IMqttServerUniqueIdService
;
import
net.dreamlu.iot.mqtt.core.server.dispatcher.IMqttMessageDispatcher
;
...
...
@@ -56,6 +57,7 @@ public class MqttServerConfiguration {
ObjectProvider
<
IMqttServerAuthHandler
>
authHandlerObjectProvider
,
ObjectProvider
<
IMqttServerUniqueIdService
>
uniqueIdServiceObjectProvider
,
ObjectProvider
<
IMqttServerSubscribeValidator
>
subscribeValidatorObjectProvider
,
ObjectProvider
<
IMqttServerPublishPermission
>
publishPermissionObjectProvider
,
ObjectProvider
<
IMqttMessageDispatcher
>
messageDispatcherObjectProvider
,
ObjectProvider
<
IMqttMessageStore
>
messageStoreObjectProvider
,
ObjectProvider
<
IMqttSessionManager
>
sessionManagerObjectProvider
,
...
...
@@ -102,6 +104,8 @@ public class MqttServerConfiguration {
uniqueIdServiceObjectProvider
.
ifAvailable
(
serverCreator:
:
uniqueIdService
);
// 订阅校验
subscribeValidatorObjectProvider
.
ifAvailable
(
serverCreator:
:
subscribeValidator
);
// 订阅权限校验
publishPermissionObjectProvider
.
ifAvailable
(
serverCreator:
:
publishPermission
);
// 消息转发
messageDispatcherObjectProvider
.
ifAvailable
(
serverCreator:
:
messageDispatcher
);
// 消息存储
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录