之前的一篇学习Divide插件的笔记里面分析过插件链,waf插件是插件链上排在sign插件后面的第二个插件。
WafPlugin也继承自AbstractSoulPlugin
,但在AbstractSoulPlugin
的execute
方法里面对waf插件与其他插件如divide插件稍有不同。
divide插件在AbstractSoulPlugin
的execute
方法里面的处理过程是:
- 判断内存缓存中是否有插件数据,没有则执行下一个插件
- 判断插件数据中是否启用的标志位是否为true,否则执行下一个插件
- 插件数据中是否有selector列表,没有则报错
- selector列表中是否有与当前请求匹配的selector,没有则报错
- 与当前请求匹配的selector是否有rule列表,没有则报错
- rule列表中是否有与当前请求匹配的rule,没有则报错
- 执行DividePlugin的doExecute方法
但是waf插件在AbstractSoulPlugin
的execute
方法里面的处理过程是这样的:(总结为,只要waf插件启用了,就会调用WafPlugin
的doExecute
方法)
- 判断内存缓存中是否有插件数据,没有则执行下一个插件
- 判断插件数据中是否启用的标志位是否为true,否则执行下一个插件
- 插件数据中是否有selector列表ÿ