exhook函数,订阅主题时,根据判断,中断当前客户端的连接

环境信息

  • EMQX 版本:5.0.8
  • 操作系统及版本:Windows10 x64
  • 其他

问题描述

经测试下面的代码,执行了responseObserver.onError之后,客户端还是能够成功订阅该主题。
有个这样的需求,例如在onClientSubscribe函数中,根据客户端订阅的主题集合,遍历判断是否包含某个主题,如果有则直接中断该客户端连接,是否有该类型的方法提供?由于官方文档较少,没有找到相关信息,求解答。

@Override
        public void onClientSubscribe(ClientSubscribeRequest request, StreamObserver<EmptySuccess> responseObserver) {
            DEBUG("onClientSubscribe", request);
            EmptySuccess reply = EmptySuccess.newBuilder().build();

            List<TopicFilter> topicFiltersList = request.getTopicFiltersList();
            for (TopicFilter topicFilter : topicFiltersList) {
                if ("$dr".equals(topicFilter.getName())) {
                    responseObserver.onError(new RuntimeException("onClientSubscribe"));
                }
            }
            responseObserver.onNext(reply);
            responseObserver.onCompleted();
        }

配置文件及日志

如果不允许的订阅的话,应该是实现 OnClientAuthorize 里面中返回 Deny

onClientSubscribe 当前仅是一个通知的方法的,返回值和错误都会被 ExHook 忽略的

authenticate, authorize可以设置鉴权,还有publish设置消息的发布以外,其它函数可以理解为单纯的做日志记录使用的对吧

是的

OnClientAuthorize中进行校验之后,返回给client的错误信息默认为“ Error: Connection refused: Not authorized”,这个报错信息可以定制么