go语言web开发08 - beego中使用过滤器

先介绍下什么是过滤器:MVC中的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理,这时就用到了过滤器。

 

一、添加过滤器

beego中添加过滤器需要在main.go文件里的beego.Run()上方添加,下面是一个示例:

beego.InsertFilter("/*", beego.BeforeRouter, controllers.Filter_user)

说明:

  • 第一个参数:表示过滤的路由规则,支持通配符(上面的示例里表示将/下的所有路径都添加这个过滤器)
  • 第二个参数:过滤器的位置(过滤器设置在哪里),beego支持的有5种位置
    1. beego.BeforeStatic:静态地址之前执行过滤器
    2. beego.BeforeRouter:寻找路由之前执行过滤器
    3. beego.BeforeExec:找到路由之后,开始执行相应的Controller之前执行过滤器
    4. beego.AfterExec:执行完Controller逻辑之后执行的过滤器执行过滤器
    5. beego.FinishRouter:执行完逻辑之后执行的过滤器
  • 第三个参数:拦截后执行的函数(函数是自己写的)
    1. func(ctx *context.Context)    // 参数必须是*context.Context
  • 第四个参数:
    1. 第一个设置returnOnOutput的值,默认是true,即如果有输出是否跳过其他的过滤器,默认只要有输出就不再执行其他过滤器,即执行完controller之后不会执行后面的过滤器
    2. 第二个表示是否充值过滤的参数,默认是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路由。

 

posted @ 2020-09-07 12:49  欧-阳  阅读(1688)  评论(0)    收藏  举报