我的蚊子中有ACL文件:
user b
topic read s1#
topic write s1#
topic write s2
topic read s2
pattern write s3_%c#
pattern read s3_%c#
pattern write s4_%c
pattern read s4_%c
pattern write s5_%u#
pattern read s5_%u#
pattern write s6_%u
pattern read s6_%u
下面从客户端ID s4_abc
向主题abc
的请求工作正常:
mosquitto_pub -h servername -t s4_abc -m "test" -p 1883 -u b -P b -i abc -d
下面从客户端ID s3_abcA
向主题abc
的请求失败:
mosquitto_pub -h servername -t s3_abcA -m "test" -p 1883 -u b -P b -i abc -d
为什么失败?我期望模式s3_%c#表示“ s3_abc”之后的主题中的任何短语都可以。
您在ACL文件中的主题和模式无效,它们之间的通配符之间必须有/
。
通配符仅匹配整个主题细分。
%u
和%c
也是一样>
从mosquitto.conf手册页:
可用于替换的模式是:
%c以匹配客户端%u的客户端ID以匹配用户名客户端。 替换模式必须是唯一的文本等级]]。模式ACL适用于所有用户,即使“用户”关键字先前已给出。
示例:
模式写入传感器/%u /数据
允许访问网桥连接消息:
模式写入$ SYS / broker / connection /%c / state