企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 过滤器就是一种拦截器,对没有满足条件的请求进行拦截 ## beego中使用过滤器: beego.InsertFilter(pattern string, position int, filter FilterFunc, params ...bool) * #### 第一个参数表示过滤的路由规则,支持通配符 * #### 第二个参数就是过滤器的位置,beego支持的有5种 * BeforeStatic 静态地址之前 * BeforeRouter 寻找路由之前 * BeforeExec 找到路由之后,开始执行相应的 Controller 之前 * AfterExec 执行完 Controller 逻辑之后执行的过滤器 * FinishRouter 执行完逻辑之后执行的过滤器 * #### 第三个参数为执行的函数 * func(\*context.Context) 参数必须是context.Context * #### 第四个参数 * 第一个设置 returnOnOutput 的值,默认 true。即如果有输出是否跳过其他过滤器,默认只要有输出就不再执行其他过滤器,即执行完controller之后不会执行后面的过滤器 * 第二个表示是否重置过滤器的参数,默认是 false **注意:使用 session 的 Filter 必须在 BeforeStatic 之后才能获取,因为 session 没有在这之前初始化。** 示例: ~~~ func main() {   // 过滤器   beego.InsertFilter("/*", beego.BeforeRouter, controllers.FilterUser,true,false) ​   beego.Run() } ​ // 如果session中没有uid则跳转到登陆页面 var FilterUser = func(ctx *context.Context) {   if ctx.Request.RequestURI != "/login" {         // 如果请求的url不是login,则重定向到login路径       ctx.Redirect(302, "/login")   } } ~~~