物联网架构成长之路(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打印的信息

原文地址:https://www.cnblogs.com/wunaozai/p/8185708.html

时间: 2024-08-01 14:54:26

物联网架构成长之路(7)-EMQ权限验证小结的相关文章

物联网架构成长之路(33)-EMQ数据存储到influxDB

一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和emq.现在随着对物联网的深入,也结合实际需求,不停的学习.下面将介绍我实验测试可行的物联网数据分析解决方案.采用的还是开源方案.通过订阅MQTT的根Topic,把所有物联网数据转存到InfluxDB时序数据库,然后通过Grafana进行图表显示.这应该是目前比较流行的方案.二.安装InfluxDB I

物联网架构成长之路(4)-EMQ插件创建

1. 说明 以下用到的知识,是建立在我目前所知道的知识领域,以后如果随着知识的拓展,不一定会更新内容.由于不是EMQ公司的人,EMQ的文档又很少,很多知识点都是靠猜的.2. 一些资料 架构设计 http://emqtt.com/docs/v2/design.html 扩展插件 http://emqtt.com/docs/v2/plugins.html  一些自带的插件3. 写插件 经过上一篇博客讲解的,编译_relx后,在deps目录下就会包含了所有依赖包以及插件包,在这个目录下有个emq_pl

物联网架构成长之路(5)-EMQ插件配置

1. 前言 上一小结说了插件的创建,这一节主要怎么编写代码,以及具体流程之类的.2. 增加一句Hello World 修改 ./deps/emq_plugin_wunaozai/src/emq_plugin_wunaozai.erl 增加一行Hello World 增加后,保存 1 make clean 2 make 3 cp -r ebin ../../_rel/emqttd/lib/emq_plugin_wunaozai-2.3.1 这样就把最新版本复制到_rel 目录下了. 回到eqm-r

物联网架构成长之路(50)-EMQ配置SSL证书,实现MQTTs协议

0. 前言 EMQ是带有SSL功能的,需要进行简单的配置,才能使用.下面就简单说一下如何实现自签证书. 1. 利用OpenSSL签发证书 1 ? cat createCA.sh 2 #/bin/sh 3 # 生成自签名的CA key和证书 4 openssl genrsa -out ca.key 2048 5 openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -subj "/CN=www.wunaozai.com"

物联网架构成长之路(0)-目录

一.基础 [http://www.cnblogs.com/wunaozai/p/8067621.html] 物联网架构成长之路(1)-前言 [http://www.cnblogs.com/wunaozai/p/8075640.html] 物联网架构成长之路(2)-脚手架工具准备 [http://www.cnblogs.com/wunaozai/p/8082332.html] 物联网架构成长之路(3)-EMQ消息服务器了解

物联网架构成长之路(56)-SpringCloudGateway+JWT实现网关鉴权

0. 前言 结合前面两篇博客,前面博客实现了Gateway网关的路由功能.此时,如果每个微服务都需要一套帐号认证体系就没有必要了.可以在网关处进行权限认证.然后转发请求到后端服务.这样后面的微服务就可以直接调用,而不需要每个都单独一套鉴权体系.参考了Oauth2和JWT,发现基于微服务,使用JWT会更方便一些,所以准备集成JWT作为微服务架构的认证方式. [https://www.cnblogs.com/wunaozai/p/12512753.html] 物联网架构成长之路(54)-基于Naco

物联网架构成长之路(11)-Redis缓存主从复制

1. 说明 在我的物联网平台框架框架中,会用到Redis这个中间件.作为EMQ权限认证的缓存.https://www.cnblogs.com/think-in-java/p/5123884.html 2. 编译&运行 1 wget http://download.redis.io/releases/redis-4.0.6.tar.gz 2 make && make test && make PREFIX=/home/user/workspace/redis inst

物联网架构成长之路(16)-SpringCloud从入门到吹水

1.前言 Spring Cloud 现在比较流行,版本更新也是蛮快的,网上资料也是很多.很多参考网上资料就可以学到了.这里给个 http://blog.csdn.net/forezp/article/details/70148833 2.放弃 本来还想写一篇Spring Cloud 入门环境搭建的博客, 后来想了想,还是算了,网上资料一大堆.这里就不写了. 3.吹水 下面就简单聊聊天,吹吹水算了 2018.01.18 笔记 公司网速不行,在进行Maven项目以来更新,偷偷写一些经历. 现在开始学

物联网架构成长之路(32)-SpringBoot集成MQTT客户端

一.前言 这里虽然是说MQTT客户端.其实对于服务器来说,这里的一个具有超级权限的MQTT客户端,就可以做很多事情.比如手机APP或者网页或者第三方服务需要发送数据到设备,但是这些又不是设备,又不能让他们连到MQTT.那么就可以通过HTTP请求业务服务器.然后由业务服务器利用这个MQTT客户端进行发送数据. 还有,之前好多人问我,怎么保存这些物联网数据,真的要像前面的博客那样,要自己写插件吗?特别麻烦的啊.这里给出的结论是不需要.保存数据,除了写EMQ插件,还可以在EMQ的规则引擎上进行配置We