go语言web开发08 - beego中使用过滤器
先介绍下什么是过滤器:MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理,这时就用到了过滤器。
一、添加过滤器
beego中添加过滤器需要在main.go文件里的beego.Run()上方添加,下面是一个示例:
beego.InsertFilter("/*", beego.BeforeRouter, controllers.Filter_user)
说明:
- 第一个参数:表示过滤的路由规则,支持通配符(上面的示例里表示将/下的所有路径都添加这个过滤器) 第二个参数:过滤器的位置(过滤器设置在哪里),beego支持的有5种位置
- beego.BeforeStatic:静态地址之前执行过滤器
- beego.BeforeRouter:寻找路由之前执行过滤器
- beego.BeforeExec:找到路由之后,开始执行相应的Controller之前执行过滤器
- beego.AfterExec:执行完Controller逻辑之后执行的过滤器执行过滤器
- beego.FinishRouter:执行完逻辑之后执行的过滤器
- 第三个参数:拦截后执行的函数(函数是自己写的)
- func(ctx *context.Context) // 参数必须是*context.Context
- 第四个参数:
- 第一个设置returnOnOutput的值,默认是true,即如果有输出是否跳过其他的过滤器,默认只要有输出就不再执行其他过滤器,即执行完controller之后不会执行后面的过滤器
- 第二个表示是否充值过滤的参数,默认是false
- 注意:使用session的Filter必须在BeforeStatic之后才能获取,因为session没有在这之前初始化。
二、过滤器的函数内容
package controllers import "github.com/astaxie/beego/context" // 函数功能:当访问的url不是login 时就跳转到/login这个url func Filter_user(ctx *context.Context) { // 获取用户访问的URL if ctx.Request.RequestURI != "/login" { ctx.Redirect(302, "/login") } }
本示例过滤器小结:
添加一个过滤器(过滤器的位置是寻找路由之前),过滤器的功能是判断用户访问的是否是/login路由,如果不是就自动跳到/login路由。