• 物联网架构成长之路(7)-EMQ权限验证小结


    1. 前言

      经过前面几小节,讲了一下插件开发,这一小节主要对一些代码和目录结构进行讲解,这些都是测试过程中一些个人经验,不一定是官方做法。而且也有可能会因为版本不一致导致差异。

    2. 目录结构

     

      这个目录结构整体就是从 emq-plugin-template 复制一份过来的,然后修改。

      .erlang.mk 这个是编译过程的临时文件,不用管

      .git 这个是源代码版本管理,不用管

      data 一些系统数据文件,不用管

      deps 这个是在make编译的时候,自动下载一些依赖包,不用管

      ebin 这个是编译后的二进制文件,不用管

      etc 这个是配置文件,EMQ2.0版本后,采用K=V配置形式进行配置

      include 这个是插件用到的一些头文件子类的

      priv 这个是用来描述etc配置目录下的配置文件,这个是因为Erlang配置文件不是现在流行的K=V形式,所以需要用到priv这个目录。

      src 这个是业务逻辑源代码目录

      test 这个是单元测试代码,这里暂时不用管

      .gitignore 这个是git的文件,不用管

      emq_plugin_wunaozai.d 这个是自动生成的文件,不用管

      erlang.mk 默认,不用管

      LICENSE 不用管

      Makefile 需要配置

      README.md 默认,不用管

      rebar.config 需要增加依赖

    3. etc目录

      该目录下有 emq_plugin_wunaozai.conf 文件,主要配置一些插件用到的配置信息。

     

    4. include 目录

      该目录下有 emq_plugin_wunaozai.hrl 头文件

     

    5. priv 目录

      主要参考templates,就是配置一些参数

     

    6. test 目录

      这个暂时就不管了。

     

    7. Makefile 文件配置

      这个是修改后的Makefile, 主要是增加了Redis依赖,eredis驱动,ecpool连接池等。后面也增加了copy命令,方便开发,这个根据个人习惯。

     

    8. rebar.config 文件配置

      增加redis依赖

     

    9. src 目录

      暂时有8个文件,每个文件都有其具体用处。

      emq_acl_demo_wunaozai.erl 这个文件主要是验证一些ACL权限问题。重写check_ac方法即可完成ACL验证。

     

      emq_auth_demo_wunaozai.erl 这个文件就是对帐号密码进行验证。重写check方法即可。

     

      emq_cli_demo_wunaozai.erl 这个文件主要是提供一些命令行emqttd_clt 一些参数设置之类的。

      emq_plugin_wunaozai.erl 这个文件主要是一些钩子Hook的实现,这个后面做数据搜集会用到。

      emq_plugin_wunaozai_app.erl 这个文件还是比较重要的,是插件application的入口函数,if_cmd_enabled这个函数用来判断配置文件中是否有开启auth_cmd/auth_acl配置项,如果有配置项的,那就加载对应的功能,如下图所示

     

      emq_plugin_wunaozai_cli.erl 这个从emq_auth_redis复制过来,改一下-module -behaviour - include 之类的,如图中注释的19-20行,那个是我测试一下是否连接到Redis的,可以看出,在创建连接是,会主动建立8个连接,建立连接池,应该是开启的。

     

      emq_plugin_wunaozai_config.erl 直接从emq_auth_redis复制过来,基本不用怎么修改,修改个-model -include 如果keys() -> 配置信息的key有修改的,在86行处也要做相应的修改。

      emq_plugin_wunaozai_sup.erl 在第19行处,增加Redis连接池。

    10. 运行效果

      ./_rel/emqttd/bin/emqttd console 启动mqtt服务器,修改cache ./_rel/emqttd/etc/emq.conf 改为 mqtt.cache_acl = false

      往Redis设置数据

    1 127.0.0.1:6379> HMSET mqtt_user:test password test
    2 OK
    3 127.0.0.1:6379> HSET mqtt_acl:test /OK 0
    4 (integer) 1

      连接,帐号密码在选项页那里填。上图,可以看到连接成功,然后订阅,失败,失败的原因是,ACL验证失败。在redis上设置

    1 HSET mqtt_acl:test /OK 1

     

      可以看到,可以正常订阅了,但是发布,还是不行,没有收到,所以要在Redis上设置

    1 HSET mqtt_acl:test /OK 3

       这样就可以收发数据了。注意要实现上述测试,要把mqtt_cache 设置为 false,默认emqttd会设置为true,这样emqttd只会在第一次进行ACL验证。

      下面这个是所有emqttd console打印的信息

     

     

  • 相关阅读:
    模板汇总——Tarjian
    CountHunter 6101 最优贸易 强联通缩点
    POJ-3662 Telephone Lines 二分+双端队列
    EF-获取自增ID值
    EF-记录程序自动生成并执行的sql语句日志
    EF-使用迁移技术让程序自动更新数据库表结构
    EF-关于类库中EntityFramework之CodeFirst(代码优先)的操作浅析
    javascript进阶笔记(3)
    javascript进阶笔记(2)
    javascript进阶笔记(1)
  • 原文地址:https://www.cnblogs.com/wunaozai/p/8185708.html
Copyright © 2020-2023  润新知