🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 插件 插件操作是openstar使用的高级玩法,当使用现有的规则匹配无法实现自己想要的功能,就可以自己编写`lua`代码实现自己想要的功能。 # 编写插件 ``` local ngx_say = ngx.say local stool = require("stool") -- 可以使用 cjson_safe 模块进行 table 转 json 字符串 local _M = { _VERSION = "0.01" } local function test(_base_msg , _tb_args) local re = "" for i,v in ipairs(_tb_args) do re = re .. v .. "</br>" end ngx_say(re) ngx_say("------------------</br>") ngx_say(stool.tableTojsonStr(_base_msg)) return "break" end _M.test = test return _M ``` 看一下实际引用(高级规则)和对应的注释 ![](https://img.kancloud.cn/62/de/62de944e1f0d4e396f102cbfc2d7be31_755x540.png) * 函数名称:test 截图中函数名称是`test`,那么对应插件代码中 _M.test这个导出函数,至于等于的 test 函数,完全可以重命名为其他名称。 * 传递参数 截图中蓝色框标识的参数就是传递给插件代码中`_tb_args`这个值,这个是一个 table 类型,你可以传递一个复杂的 table **插件函数的编写,一定要接受 2 个参数,第一个参数是 WAF 传递给他的 table , _base_msg 是一个table ,本次请求的所有值都在里面!!! 如果你要过滤某些参数,就可以从这里取出来,进行自己的过滤。** * 返回值插件支持 4 个 ``` return "break" ---> 直接返回给客户端,也不会到源站 200 return "deny" ---> 执行拒绝操作(延续自定义拦截页面) return "allow" ---> 后续规则都不会匹配,直接转发到源站 return ---> 继续后续规则 ``` # 效果 访问 http://xxxxx//cap.test 得到的效果 ![](https://img.kancloud.cn/88/c8/88c849fc64c35b82e38f125467a9b152_1919x393.png)