gpt4 book ai didi

java - moquette 用户的权限与访问控制列表中写入的权限不同

转载 作者:行者123 更新时间:2023-12-01 11:18:36 28 4
gpt4 key购买 nike

我使用 moquette 作为我的 MQTT 代理。

我在配置中指定一个访问控制文件,如下所示:

acl_file acl.conf

然后在 acl.conf 文件中,我只添加了一个用户,如下所示:

user gravity
topic read in
topic write out

我的问题

用户gravity无法写入out主题,我收到错误消息:主题 {out} 没有写入凭证

此外,用户gravity可以订阅所有主题,而不仅仅是in

另外,我还有另一个用户,即 williamwilliam 可以订阅任何主题,但不能在任何主题上发布。我不知道 william 怎么可能订阅任何主题,尽管 acl 文件声明我只有一个具有列出的权限的用户

注意

尽管我正在研究 moquette,但我还是为 mosquitto 添加了一个标签,这是因为它们共享相同的 acl 格式

更新

准备好经纪人的代码后,

我发现这是当新的订阅请求到来时被调用的函数:

@MQTTMessage(message = SubscribeMessage.class)
void processSubscribe(ServerChannel session, SubscribeMessage msg) {
String clientID = (String) session
.getAttribute(NettyChannel.ATTR_KEY_CLIENTID);
boolean cleanSession = (Boolean) session
.getAttribute(NettyChannel.ATTR_KEY_CLEANSESSION);
LOG.debug("SUBSCRIBE client <{}> packetID {}", clientID,
msg.getMessageID());

// ack the client
SubAckMessage ackMessage = new SubAckMessage();
ackMessage.setMessageID(msg.getMessageID());

for (SubscribeMessage.Couple req : msg.subscriptions()) {
AbstractMessage.QOSType qos = AbstractMessage.QOSType.values()[req
.getQos()];
Subscription newSubscription = new Subscription(clientID,
req.getTopicFilter(), qos, cleanSession);
boolean valid = subscribeSingleTopic(newSubscription,
req.getTopicFilter());
ackMessage.addType(valid ? qos : AbstractMessage.QOSType.FAILURE);
}

我认为这个函数有一个错误,因为我看不到任何对 IAuthorizator canRead 函数的调用

我什至尝试构建自己的身份验证插件,并且我在考试中遇到了同样的问题,即发布授权有效,但订阅授权无效

最佳答案

可能您没有引用正确的 acl 文件,如果它位于 conf 子目录中,请记住路径必须是 acl_file conf/acl.conf。

关于读取权限,Moquette 并没有检查订阅行为的权利,只是避免发布消息,但拒绝是沉默的。

安德里亚

关于java - moquette 用户的权限与访问控制列表中写入的权限不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511811/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com