当前位置: 首页 > news >正文

为什么mosquitto 禁用了 topic “#“后,无法使用主题中包含%c client_id了?

禁用通配符主题#后无法使用%c占位符的问题,主要涉及Mosquitto的ACL权限机制与动态占位符的逻辑冲突。具体原因如下:

  1. ‌通配符与动态占位符的依赖关系‌
    ‌#通配符的作用‌:通配符#允许订阅多级模糊匹配主题(如sensor/#可订阅所有以sensor/开头的主题)7。
    ‌%c占位符的特性‌:%c用于在主题中动态替换为连接客户端的client_id(如订阅sensor/%c/data会替换为sensor/client123/data)。此功能依赖于客户端连接时动态生成主题路径的能力4。
  2. ‌通配符禁用后的权限限制‌
    当禁用#通配符时,ACL规则要求客户端必须‌明确指定完整主题路径‌。此时动态生成的%c占位符无法通过模糊匹配验证,因为系统要求主题必须完全静态且可预判27。
    例如:若ACL配置为禁止#,则客户端试图订阅sensor/%c/data时,Mosquitto会检查主题是否包含通配符或动态占位符,发现%c可能隐含动态匹配逻辑(即使实际生成的是静态主题),触发权限拒绝24。
  3. ‌解决方法‌
    需调整ACL规则以兼容动态占位符:

conf
Copy Code

允许客户端使用自身client_id动态生成主题

pattern write sensor/%c/#
此规则明确允许客户端在sensor/%c/路径下动态生成子主题,同时避免使用全局通配符#27。

比如:
topic write v2/s/+/%c/status
#topic read v2/c/%c/cmd
这一行不行,
改成:
pattern write v2/s/+/%c/#
pattern read v2/c/%c/#
可以了。

完整的:

#topic write v2/s/+/%c/status
pattern write v2/s/+/%c/#
topic write +/+/status
#topic read v2/c/%c/cmd
pattern read v2/c/%c/#
#topic read +/cmd
pattern read %c/#
topic deny $SYS/#
#topic deny #

这样实现了匿名用户根据client_id动态订阅主题。并且让“#”主题无法查看到信息。

mosquitto_sub -h mqtt.xxxx.hk -p 8883 -v -t '#'
http://www.xdnf.cn/news/592777.html

相关文章:

  • python容器
  • PTA刷题笔记
  • 浏览器原生 Web Crypto API 实现 SHA256 Hash 加密
  • 六:操作系统虚拟内容之内存文件映射
  • DeepSeek的进阶应用场景大全
  • poppler_path 是用于 Python 库如 pdf2image 进行 PDF 转换时
  • 《告别单一智能:神经符号混合系统驱动推理能力的跨界融合》
  • 哈希表和容器中添加元素的方法
  • 什么是CDN(Content Delivery Network,内容分发网络)
  • ubunt配置本地源
  • Linux开发板串口终端会限制命令字符数并且循环覆盖
  • 并发编程 之 TreeMap ConcurrentSkipListMap set queue源码分析
  • 自动化测试报告工具
  • 【八股战神篇】Redis高频面试题
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月22日第85弹
  • 数据结构知识点汇总
  • 速卖通关键词搜索API开发指南
  • 简单说一下px和ex 的区别......
  • 测试文章1
  • ATGM336H-6N_GNSS 单频多模定位导航模块
  • IEEE Wireless Communications 2025年1月-4月论文速览
  • 二十一、面向对象底层逻辑-scope作用域接口设计
  • 05算法学习_59. 螺旋矩阵 II
  • 如何测试JWT的安全性:全面防御JSON Web Token的安全漏洞
  • 第34节:迁移学习中的特征提取方法
  • 落石滑坡倒树自然灾害检测数据集VOC+YOLO格式958张3类别
  • Linux 搭建FTP服务器(vsftpd)
  • 操作系统结构
  • C++23中std::span和std::basic_string_view可平凡复制提案解析
  • 珠宝课程小程序源码介绍