go - 有没有办法将中间件路由器与组路由器?
问题描述
我是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”关键字。
我尝试了以下选项,例如:
我将“Front”命名空间内的代码复制到外面,但我的“NSBefore”将应用之后定义的所有方法。我需要2组。授权前和授权后。在经过身份验证后,我想添加
beego.NSBefore(AuthFilter)
.我尝试使用策略,但它不能按我的需要工作。
beego.Policy("/api/v1/front/*","*", AuthFilter)
beego.Policy("/api/v1/admin/*","*", AuthFilter)
如果我将从策略中删除前面,那么它将应用所有 URL。
我们是否有任何选项可以创建没有 URL 路径的组路由器,它会涵盖我的概念?
解决方案
推荐阅读
- python - 尽管其他应用程序使用了 TensorFlow 并没有使用我所有的 VRAM
- java - 如何在 Spring Boot 中将不同的 JSON 响应消费到客户端的单个端点中?
- php - PHP Regex 忽略特定字符之间的字符串
- ssis - 如何在 SSIS 中的源/目标之间同步数据插入-更新-删除
- node.js - 如何在 forEach 循环节点中使用 Promise?
- java - 使用 AWS SDK for Java 2.x 将大文件上传到 S3 时内存不足
- python - 如何正确使用可选的 argparse 参数和子解析器
- c# - Linq 查询 - 根据条件跳过下一个查询执行
- php - exec:“php-fpm”:在 $PATH 中找不到可执行文件:未知
- c - C语言中的**是什么?