drogon框架做完URL路径匹配后,会先依次调用注册到该路径上的过滤器,只有当所有过滤器都允许”通过”时,对应的handler才会被调用;
drogon内置了如下常用过滤器:
- :只放行本机127.0.0.1或者::1发来的http请求,否则返回404页面;
当然,用户可以自定义过滤器,需要继承HttpFilter类模板,模板类型就是子类类型,比如我们想做一个LoginFilter,就可以定义如下:
我们需要重载父类的doFilter虚函数实现过滤器逻辑;
这个虚函数有三个参数,分别是:
- req: http请求;
- fcb:过滤器回调函数,函数类型是void (HttpResponsePtr),当过滤器判定请求不合法时,通过这个回调把特定的响应返回给浏览器;
具体的实现可以参考drogon内置过滤器的实现。
则在路径匹配成功后,必须满足如下条件,getInfo方法才会被调用:
- 请求必须是http get请求;
- 请求方必须已经登录;
可以看到,过滤器的配置和注册是非常简单的,注册过滤器的controller文件并不需要引用过滤器的头文件,过滤器和控制器也是充分解耦的。
注意: 如果过滤器定义在命名空间里,注册过滤器时必须把命名空间写全