如何在golang beego中添加过滤器

时间:2016-09-30 07:53:41

标签: go beego

我已经开始开发web应用程序,其后端是golang。我使用beego框架来开发这个应用程序。以前我以前在java.Java中编程有一个过滤器函数来过滤url的请求。我来了解我们可以在阅读文档后在beego中实现它。他们已经给出了以下示例代码

var FilterUser = func(ctx *context.Context) {
    if strings.HasPrefix(ctx.Input.URL(), "/login") {
        return
    }

    _, ok := ctx.Input.Session("uid").(int)
    if !ok {
        ctx.Redirect(302, "/login")
    }
}

beego.InsertFilter("/*", beego.BeforeRouter, FilterUser) 

问题是我不知道在哪里使用这段代码....有人可以帮助我。感谢你的帮助。谢谢

1 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  • 在路由器中设置要保护的URL以及相应的过滤器
  • 创建一个过滤器功能,由路由器调用并检查用户

更详细:

// A URL set in router.go
beego.InsertFilter("/admin/", beego.BeforeRouter, controllers.ProtectAdminPages)

// A Filter that runs before the controller
// Filter to protect admin pages
var ProtectAdminPages = func(ctx *context.Context) {
    sess, _ := beego.GlobalSessions.SessionStart(ctx.ResponseWriter, ctx.Request)
    defer sess.SessionRelease(ctx.ResponseWriter)
    // read the session from the request
    ses := sess.Get("mysession")
    if ses != nil {
        s := ses.(map[string]string)
        // get the key identifying the user id
        userId, _ := strconv.Atoi(s["id"])
        // a utility function that searches the database
        // gets the user and checks for admin privileges
        if !utils.UserIsAdmin(userId) {
            ctx.Redirect(301, "/some-other-page")
        }
    } else {
        ctx.Redirect(301, "/")
    }
}