有没有办法用组路由器去中间件路由器?

时间:2018-09-10 12:37:40

标签: go beego golang-migrate

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

我使用中间件和组路由器创建的路由很少,但是我不需要专家的建议。

让我分享我所做的例子。

Router.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)可以正常工作。但我想从网址中删除“前”关键字。

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

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

  2. 我尝试使用策略,但无法按需使用。

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

如果我要从策略中删除前端,则它将应用所有URL。

我们是否可以选择创建没有URL路径的组路由器,而这将涵盖我的概念?

0 个答案:

没有答案