beego过滤器InsertFilter抽成中间件,示例代码后台登录检查拦截

2023-06-01 00:00:00 示例 过滤器 拦截

beego.InsertFilter改成中间件的形式,以我的后台登录功能为例


创建中间件文件夹及文件

\gblog\middleware\auth.go



package middleware

import (
	"fmt"

	"github.com/astaxie/beego"
	"github.com/astaxie/beego/context"
)

// 中间件
func Auth() {

	//admin请求前拦截器
	var filterFunc = func(ctx *context.Context) {

		adminid := ctx.Input.Session("adminid")
		fmt.Println(adminid, ctx.Request.RequestURI, ctx.Request)

		if adminid == nil && ctx.Request.RequestURI != "/admin/login" {
			ctx.Redirect(302, "/admin/login")
		}
	}

	beego.InsertFilter("/admin/*", beego.BeforeRouter, filterFunc)
}

ps:

注意判断一下ctx.Request.RequestURI != "/admin/login",

不然就死循环了,页面提示重定次过多...


添加至router.go文件中 (其他代码省略)


package routers

import (
   "gblog/controllers"
   "gblog/controllers/admin"
   "gblog/controllers/api"
   "gblog/middleware"
   "github.com/astaxie/beego"
)

func init() {
   //授权登录中间件
   middleware.Auth()
   
   //后台管理路由
   //使用注解路由
   beego.Include(&admin.AdminController{})
   
...



控制器

package admin

import (
   "github.com/astaxie/beego"
)

type AdminController struct {
   beego.Controller
}

func (c *AdminController) URLMapping() {
   c.Mapping("Admin", c.Admin)
   c.Mapping("Login", c.Login)
}

// @router /admin/home [get]
func (this *AdminController) Admin() {
   this.Ctx.WriteString(`我是controllers下级控制器目录admin中的admin方法`)
}

// @router /admin/login [get]
func (this *AdminController) Login() {
   this.TplName = "admin/login.html"
}

视图就不贴了 截个图

gblog\views\admin\login.html

1.png

相关文章