Gin 笔记(07)— 自定义中间件、全局中间件、组中间件、单请求中间件、BasicAuth 中间件、限流中间件、中间件内使用 goroutines
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
// 自定义一个简单的中间件,打印请求的路径
func SimpleLogger() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Printf("请求路径: %s\n", c.Request.URL)
c.Next() // 继续执行后续的中间件或路由处理器
}
}
func main() {
// 创建一个默认的路由引擎
r := gin.Default()
// 全局中间件:应用到所有的路由和组
r.Use(SimpleLogger())
// 创建一个组,并应用同样的中间件
v1 := r.Group("/v1", SimpleLogger())
{
// 组内中间件:只应用到这个组内的路由
v1.Use(func(c *gin.Context) {
fmt.Println("这是组内中间件")
c.Next()
})
v1.GET("/hello", func(c *gin.Context) {
fmt.Println("Hello from v1 group")
c.JSON(200, gin.H{"message": "Hello from v1 group"})
})
}
// BasicAuth中间件的例子
// 用户名和密码存储在内存中,仅用作演示
authorized := r.Group("/authorized")
// 使用BasicAuth中间件
// 第一个参数是realm名称,第二个是一个用户名和密码的函数
authorized.Use(gin.BasicAuth(gin.Accounts{"user": "password"}))
authorized.GET("/secret", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "You are authorized!"})
})
// 启动服务器
r.Run(":8080")
}
这个示例代码展示了如何在Gin框架中创建和使用自定义中间件、全局中间件、组内中间件以及如何使用BasicAuth
中间件来保护路由。同时,它也演示了如何在请求处理流程中打印请求信息。
评论已关闭