首页 > 解决方案 > 有没有办法将中间件路由器与组路由器?

问题描述

我是beego框架的初学者,我在里面完成了一些研发。但我需要很少的帮助相关的路由器。

我用中间件和组路由器创建了一些路由,但我需要专家的一些建议。

让我分享一下我做过的例子。

路由器.go

func init() {
    ns := beego.NewNamespace("/api/v1",

        beego.NSNamespace("/front",
            beego.NSBefore(AuthFilter),
            beego.NSRouter("/user",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/test",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/test",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/test",&controllers.ObjectController{},"*:GetValueByAdmin"),
            beego.NSRouter("/product",&controllers.ObjectController{},"*:GetValueByAdmin"),
        ),


        beego.NSNamespace("/a1",
            beego.NSRouter("/test1",&controllers.ObjectController{},"*:GetValueByAdmin1"),
            beego.NSRouter("/test2",&controllers.ObjectController{},"*:GetValueByAdmin1"),
            beego.NSInclude(
                &controllers.UserController{},
            ),
        ),
    )

    beego.AddNamespace(ns)
}

var AuthFilter = func(ctx *context.Context) {
    // The Authorization header should come in this format: Bearer <jwt>
    // The first thing we do is check that the JWT exists
    header := strings.Split(ctx.Input.Header("Authorization"), " ")
    if header[0] != "Bearer" {
        ctx.Abort(401, "Not authorized")
    }
}

我已经使用命名空间创建了路由器,并且使用此 url ( http://localhost:8080/api/v1/front/test ) 可以正常工作。但我想从 URL 中删除“front”关键字。

我尝试了以下选项,例如:

  1. 我将“Front”命名空间内的代码复制到外面,但我的“NSBefore”将应用之后定义的所有方法。我需要2组。授权前和授权后。在经过身份验证后,我想添加beego.NSBefore(AuthFilter).

  2. 我尝试使用策略,但它不能按我的需要工作。

    beego.Policy("/api/v1/front/*","*", AuthFilter) beego.Policy("/api/v1/admin/*","*", AuthFilter)

如果我将从策略中删除前面,那么它将应用所有 URL。

我们是否有任何选项可以创建没有 URL 路径的组路由器,它会涵盖我的概念?

标签: gobeegogolang-migrate

解决方案


推荐阅读