环境
- EMQX 4.4.3:
- 操作系统版本:ubantu
钩子函数中获取protocol连接方式均为mqtt,采用ws或Matt/tcp, String protocol = request.getClientinfo().getProtocol();显示均为mqtt
需求:在钩子函数针对tcp连接中的ip,禁止连接
需求:在钩子函数针对tcp连接中的ip,禁止连接
是的,用Java写自定义钩子,在onClientAuthenticate钩子函数中调用request.getClientinfo().getProtocol();获取的协议时,不管是mqtt/tcp还是ws都显示mqtt
此处的 protoname 是 MQTT 协议中的 protocol name
参考连接:
https://public.dhe.ibm.com/software/dw/webservices/ws-mqtt/mqtt-v3r1.html#3.1
https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Toc385349226
"MQIsdp" (MQTT v3.1)
"MQTT" (MQTT v3.1.1 and MQTT v5.0)
可以用 ClientInfo 中的 peerhost 来获取客户端 ip:
(客户端 port 在 4.x 中未支持,将在即将发布的 5.4.0 中支持)
有API能获取到协议类型、例如WS\或TCP我在4.4.3的版本中没有找到
socktype 暂不支持,但可以用 sockport 即客户端连接的端口号来侧面判断。
但这将把业务与 EMQX的部署/端口耦合。
感谢,准备采用clientId区分,ws用指定clientId