beego 支持自定义过滤中间件,例如安全验证,强制跳转等。

    1. 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
      1. 设置 returnOnOutput 的值(默认 true), 是否允许如果有输出是否跳过其他 filters,默认只要有输出就不再执行其他 filters
      2. 是否重置 filters 的参数,默认是 false。

    示例:

    1. var FilterUser = func(ctx *context.Context) {
    2. _, ok := ctx.Input.Session("uid").(int)
    3. if !ok && ctx.Request.RequestURI != "/login" {
    4. ctx.Redirect(302, "/login")
    5. }
    6. }
    7. beego.InsertFilter("/*",beego.BeforeRouter,FilterUser)