亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原創

Gin的中間件使用

2024-10-14 09:40:29
11
0

Gin中間件的分類

Gin中間件可以分為全局中間件和局部中間件。全局中間件是指對每個請求都會執行的中間件,而局部中間件則只對特定路由或路由組生效。

全局中間件

全局中間件可以通過以下方式進行注冊:

1
2
goCopy Coder := gin.Default()
r.Use(Logger(), Recovery())

上邊的代碼注冊了兩個全局中間件:Logger和Recovery。Logger打印了每個請求的HTTP方法、URL和響應狀態碼,而Recovery則在出現panic時恢復程序并返回500錯誤響應。這兩個中間件均被廣泛應用于生產環境中。

局部中間件

局部中間件可以通過以下方式進行注冊:

1
2
3
goCopy Codeauth := r.Group("/auth", AuthMiddleware())
auth.GET("/login", LoginHandler)
auth.POST("/logout", LogoutHandler)

上邊的代碼創建了一個/auth路由組,并將AuthMiddleware中間件應用于該路由組,然后注冊了兩個路由:/login和/logout。只有經過AuthMiddleware中間件驗證的請求才能訪問這兩個路由。

實現自定義中間件

Gin提供了一種簡便的方式來編寫自定義中間件,只需要編寫一個函數,接受*gin.Context作為參數,并在其內部執行相應操作。以下是一個示例:

1
2
3
4
5
6
7
8
9
10
11
goCopy Codefunc BasicAuth() gin.HandlerFunc {
return func(c *gin.Context) {
user, pass, ok := c.Request.BasicAuth() // 當然這里也可以自定義其他的頭
if !ok || user != "yunson" || pass != "xxxx" {
c.Header("YS-Authenticate", "Auth Faild")
 c.AbortWithStatus(http.StatusUnauthorized)
return
}
c.Next()
}
}

以上實現了一個基本認證中間件,該中間件要求請求包含Basic Auth信息,并且用戶名和密碼必須正確才能通過。否則將返回401 Unauthorized錯誤響應。

另外中間件在實現接口埋點功能也經常會被用到

中間件的順序

在Gin中,中間件的順序非常重要,因為它們按照注冊順序依次執行。特別是對于局部中間件,如果中間件的順序不正確,則可能會導致某些中間件被跳過或者執行順序出錯。

可以利用group來實現不同組別的路由來添加不同的中間件,比如有的是外部接口需要驗證數字簽名,有的則是需要驗證用的登錄態等等。

另外在編寫中間件的時候,如果接口異常時想及時上報,可以在中間件內捕獲異常,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
func PointAudit() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
err := recover()
if err != nil {
// 上報err
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
}
}()
}
c.Next()
}
}

小結

中間件是Gin框架的一個關鍵特性,它可以用于實現各種常見功能,如日志記錄、錯誤處理、認證等。全局中間件適用于所有請求,而局部中間件只對特定路由或路由組生效。編寫自定義中間件非常簡單,只需要實現一個接受*gin.Context作為參數的函數即可。在使用中間件時,中間件的順序非常重要,正確的順序可以避免許多問題的出現。

0條評論
作者已關閉評論
yunson
9文章數
0粉絲數
yunson
9 文章 | 0 粉絲
原創

Gin的中間件使用

2024-10-14 09:40:29
11
0

Gin中間件的分類

Gin中間件可以分為全局中間件和局部中間件。全局中間件是指對每個請求都會執行的中間件,而局部中間件則只對特定路由或路由組生效。

全局中間件

全局中間件可以通過以下方式進行注冊:

1
2
goCopy Coder := gin.Default()
r.Use(Logger(), Recovery())

上邊的代碼注冊了兩個全局中間件:Logger和Recovery。Logger打印了每個請求的HTTP方法、URL和響應狀態碼,而Recovery則在出現panic時恢復程序并返回500錯誤響應。這兩個中間件均被廣泛應用于生產環境中。

局部中間件

局部中間件可以通過以下方式進行注冊:

1
2
3
goCopy Codeauth := r.Group("/auth", AuthMiddleware())
auth.GET("/login", LoginHandler)
auth.POST("/logout", LogoutHandler)

上邊的代碼創建了一個/auth路由組,并將AuthMiddleware中間件應用于該路由組,然后注冊了兩個路由:/login和/logout。只有經過AuthMiddleware中間件驗證的請求才能訪問這兩個路由。

實現自定義中間件

Gin提供了一種簡便的方式來編寫自定義中間件,只需要編寫一個函數,接受*gin.Context作為參數,并在其內部執行相應操作。以下是一個示例:

1
2
3
4
5
6
7
8
9
10
11
goCopy Codefunc BasicAuth() gin.HandlerFunc {
return func(c *gin.Context) {
user, pass, ok := c.Request.BasicAuth() // 當然這里也可以自定義其他的頭
if !ok || user != "yunson" || pass != "xxxx" {
c.Header("YS-Authenticate", "Auth Faild")
 c.AbortWithStatus(http.StatusUnauthorized)
return
}
c.Next()
}
}

以上實現了一個基本認證中間件,該中間件要求請求包含Basic Auth信息,并且用戶名和密碼必須正確才能通過。否則將返回401 Unauthorized錯誤響應。

另外中間件在實現接口埋點功能也經常會被用到

中間件的順序

在Gin中,中間件的順序非常重要,因為它們按照注冊順序依次執行。特別是對于局部中間件,如果中間件的順序不正確,則可能會導致某些中間件被跳過或者執行順序出錯。

可以利用group來實現不同組別的路由來添加不同的中間件,比如有的是外部接口需要驗證數字簽名,有的則是需要驗證用的登錄態等等。

另外在編寫中間件的時候,如果接口異常時想及時上報,可以在中間件內捕獲異常,如下

1
2
3
4
5
6
7
8
9
10
11
12
13
func PointAudit() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
err := recover()
if err != nil {
// 上報err
c.JSON(http.StatusInternalServerError, gin.H{"message": err})
}
}()
}
c.Next()
}
}

小結

中間件是Gin框架的一個關鍵特性,它可以用于實現各種常見功能,如日志記錄、錯誤處理、認證等。全局中間件適用于所有請求,而局部中間件只對特定路由或路由組生效。編寫自定義中間件非常簡單,只需要實現一個接受*gin.Context作為參數的函數即可。在使用中間件時,中間件的順序非常重要,正確的順序可以避免許多問題的出現。

文章來自個人專欄
文章 | 訂閱
0條評論
作者已關閉評論
作者已關閉評論
0
0