beego 支持自定义过滤中间件,例如安全验证,强制跳转等。
beego.InsertFilter(pattern string, position int, filter FilterFunc, params ...bool)
InsertFilter 函数的三个必填参数,一个可选参数
- pattern 路由规则,可以根据一定的规则进行路由,如果你全匹配可以用
*
- position 执行 Filter 的地方,分别表示不同的执行过程
- BeforeStatic 静态地址之前
- BeforeRouter 寻找路由之前
- BeforeExec 找到路由之后,开始执行相应的 Controller 之前
- AfterExec 执行完 Controller 逻辑之后执行的过滤器
- FinishRouter 执行完逻辑之后执行的过滤器
- filter 过滤器内容函数, func(*context.Context)
- params
- 设置 returnOnOutput 的值(默认 true), 是否允许如果有输出是否跳过其他 filters,默认只要有输出就不再执行其他 filters
- 是否重置 filters 的参数,默认是 false。
示例:
var FilterUser = func(ctx *context.Context) {
_, ok := ctx.Input.Session("uid").(int)
if !ok && ctx.Request.RequestURI != "/login" {
ctx.Redirect(302, "/login")
}
}
beego.InsertFilter("/*",beego.BeforeRouter,FilterUser)