[!NOTE] 中间件为过滤进入应用程序的 HTTP 请求提供了一种方便的机制
- 项目内置了
logger
,recovery
,404
,checkLogin
,rbac
等中间件 - 所有中间件目前都位于
app/middleware
目录下
定义中间件
- 在
app/middleware
下新建文件 package
定义为middleware
func Casbin_rbac() gin.HandlerFunc {
return func(c *gin.Context) {
c.Abort()//阻断
c.Next()//继续执行
}
}
为路由设置中间件
- 定义好中间件后到路由文件使用
Use
方法 - 例如
routes/admin.go
中间件参数
- 我们可以拿到gin.Context的参数
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
t := time.Now()
// 设置 example 变量
c.Set("example", "12345")
// 请求前
c.Next()
// 请求后
latency := time.Since(t)
log.Print(latency)
// 获取发送的 status
status := c.Writer.Status()
log.Println(status)
}
}
中间件的执行流程
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
log.Println("请求前")
c.Next()
// 请求后
log.Println("请求后")
}
}