如何在beego中添加过滤器
How to add filters in beego
我已经开始开发后端为 Go 的 Web 应用程序。我正在使用 beego 框架来开发这个 application.Previously 我曾经在 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)
问题是我不知道在哪里使用这段代码。
您可以执行以下操作:
- 在路由器中设置要保护的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, "/")
}
}
我已经开始开发后端为 Go 的 Web 应用程序。我正在使用 beego 框架来开发这个 application.Previously 我曾经在 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)
问题是我不知道在哪里使用这段代码。
您可以执行以下操作:
- 在路由器中设置要保护的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, "/")
}
}