自定义过滤器
需要登录才能访问的
/cms/user/add /cms/user/list /cms/user/edit /cms/book/add
不需要登录可以访问:
/ /login /register
beego.InsertFilter(pattern string, position int, filter FilterFunc, params …bool)
- 第一个参数表示过滤的路由规则,支持通配符
- 第二个参数就是过滤器的位置,beego支持的有5种
- BeforeStatic 静态地址之前
- BeforeRouter 寻找路由之前
- BeforeExec 找到路由之后,开始执行相应的 Controller 之前
- AfterExec 执行完 Controller 逻辑之后执行的过滤器
- FinishRouter 执行完逻辑之后执行的过滤器
- 第三个参数为执行的函数
- func(*context.Context) 参数必须是context.Context , context是beego包下的
- 其他参数:使用默认得到true即可
示例:
func main() {
// 过滤器
beego.InsertFilter("/*", beego.BeforeRouter, controllers.LoginSpider1Filter)
beego.Run()
}
func LoginSpider1Filter(ctx *context.Context) {
// 获取session
id := ctx.Input.Session("spider1_uid")
if id == nil { // 说明未登录
ctx.Redirect(302,"/main/spider1/to_login")
// 路由反转:beego.URLFor("TestController.Get")
}
}
注意:使用 session 的 Filter 必须在 BeforeStatic 之后才能获取,因为 session 没有在这之前初始化。