- beego 支持自定义过滤中间件,例如安全验证,强制跳转等。
过滤器函数如下所示:
beego.InsertFilter(pattern string, position int, filter FilterFunc, params ...bool)
- filter filter 函数 type FilterFunc func(*context.Context)
- params
- 设置 returnOnOutput 的值(默认 true), 如果在进行到此过滤之前已经有输出,是否不再继续执行此过滤器,默认设置为如果前面已有输出(参数为true),则不再执行此过滤器
- 是否重置 filters 的参数,默认是 false,因为在 filters 的 pattern 和本身的路由的 pattern 冲突的时候,可以把 filters 的参数重置,这样可以保证在后续的逻辑中获取到正确的参数,例如设置了
/api/*
的 filter,同时又设置了/api/docs/*
的 router,那么在访问 /api/docs/swagger/abc.js 的时候,在执行 filters 的时候设置:splat
参数为docs/swagger/abc.js
,但是如果不清楚 filter 的这个路由参数,就会在执行路由逻辑的时候保持docs/swagger/abc.js
,如果设置了 true,就会重置:splat
参数.
如:验证用户是否已经登录,应用于全部的请求:
通过正则路由进行过滤,如果匹配参数就执行:
过滤器实现路由
-
beego1.1.2 开始 Context.Input 中增加了 RunController 和 RunMethod, 这样我们就可以在执行路由查找之前,在 filter 中实现自己的路由规则.
如下示例实现了如何实现自己的路由规则: