中間件介紹
- Gin框架允許開發者在處理請求的過程中加入用戶自己的鉤子(Hook)函數
- 這個鉤子函數就是中間件,中間件適合處理一些公共的業務邏輯
- 比如登錄認證,權限校驗,數據分頁,記錄日志,耗時統計
1.定義全局中間件
package mainimport ("fmt""github.com/gin-gonic/gin"
)// 4.定義全局中間件
func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {fmt.Println("我是一個全局中間件")}
}func main() {// 1.實力化引擎r := gin.Default()// 全局使用中間件r.Use(MiddleWare())// 2. 配置路由r.GET("/hello", func(c *gin.Context) {fmt.Println("執行hello")c.JSON(200, gin.H{"msg": "執行成功"})})// 3. 啟動服務fmt.Println("服務啟動成功:http://127.0.0.1:8080/hello")r.Run(":8080")
}
2.定義局部中間件
func main() {// 1.實力化引擎r := gin.Default()// 2. 配置路由r.GET("/hello", func(c *gin.Context) {fmt.Println("執行hello")c.JSON(200, gin.H{"msg": "執行成功"})})// 局部使用中間件r.GET("/hook", MiddleWare(), func(c *gin.Context) {fmt.Println("執行hello")c.JSON(200, gin.H{"msg": "執行hook成功"})})// 3. 啟動服務fmt.Println("服務啟動成功:http://127.0.0.1:8080/hello")r.Run(":8080")
}
中間件的應用
package mainimport ("fmt""github.com/gin-gonic/gin"
)// 4.定義全局中間件
func Auth() gin.HandlerFunc {return func(c *gin.Context) {// 1. 獲取tokentoken := c.Request.Header.Get("token")fmt.Println(token)if token != "123456" {c.String(403, "token驗證失敗")c.Abort() // 終止請求return}c.Next()}
}func main() {// 1.實力化引擎r := gin.Default()// 2. 配置路由r.GET("/index", func(c *gin.Context) {c.JSON(200, gin.H{"msg": "index無需登錄可以訪問"})})r.GET("/home", Auth(), func(c *gin.Context) {c.JSON(200, gin.H{"msg": "home需登錄驗證才能訪問"})})// 3. 啟動服務fmt.Println("服務啟動成功:http://127.0.0.1:8080/hello")r.Run(":8080")
}
token驗證失敗直接反饋403
驗證成功才能訪問