Gin 路由以及中介軟體

2021-10-09 03:57:43 字數 2688 閱讀 4558

)

分組路由使**邏輯更加模組化,同時也易於定義中介軟體的使用範圍

v1 := router.

group

("/v1"

)v1.

get(

"/login"

,func

(c *gin.context)

)v2 := router.

group

("/v2"

)v2.

get(

"/login"

,func

(c *gin.context)

)

先定義乙個中介軟體函式:

func

middleware

() gin.handlerfunc

}

該函式只會給c上下文新增乙個屬性,並賦值。後面的路由處理器,可以根據被中介軟體裝飾後提取其值。需要注意,雖然名為全域性中介軟體,只要是在註冊中介軟體的過程之前設定的路由,將不會受註冊的中介軟體所影響。只有註冊了中介軟體以下**的路由函式規則,才會被中介軟體裝飾

router.

use(

middleware()

))})

}

使用router裝飾中介軟體,然後在/middlerware即可讀取request的值,注意在router.use(middleware())**以上的路由函式,將不會有被中介軟體裝飾的效果。

使用花括號包含被裝飾的路由函式只是乙個**規範,即使沒有被包含在內的路由函式,只要使用router進行路由,都等於被裝飾了。想要區分許可權範圍,可以使用組返回的物件註冊中介軟體。

# curl  

如果沒有註冊就使用 mustget 方法讀取c的值將會拋錯,可以使用 get 方法取而代之

上面的註冊裝飾方式,會讓所有下面所寫的**都預設使用 router 註冊過的中介軟體

當然,gin也提供了針對指定的路由函式進行註冊。

router.

get(

"/before"

,middleware()

,func

(c *gin.context))}

)

把上述**寫在 router.use(middleware())之前,同樣/before被裝飾了中介軟體

群組的中介軟體也類似,只要在對應的群組路由上註冊中介軟體函式即可:

authorized := router.

group

("/"

,mymiddelware()

)// 或者這樣用:

authorized := router.

group

("/"

)authorized.

use(

mymiddelware()

)

群組可以巢狀,因為中介軟體也可以根據群組的巢狀規則巢狀

下面實現乙個簡易的鑑權中介軟體

)登入函式會設定乙個session_id的cookie,注意這裡需要指定path為/,不然gin會自動設定cookie的path為/auth,乙個特別奇怪的問題。/home的邏輯很簡單,使用中介軟體authmiddleware註冊之後,將會先執行authmiddleware的邏輯,然後才到/home的邏輯

authmiddleware的**如下:

}}從上下文的請求中讀取cookie,然後校對cookie,如果有問題,則終止請求,直接返回,這裡使用了c.abort()方法

♥ 喜 歡 請 點 贊 喲 ♥

(●ˇ∀ˇ●)

gin中介軟體講解

1 想要使用中介軟體必須是乙個 func c gin.context 型別的函式,底層實現了handefunc方法 2 中介軟體是請求和響應的分界點,無論怎麼變換給前端響應的那個動作永遠最後執行 2 use 法的作用是,將中介軟體函式存放到乙個map裡用於後續的執行,只會給c上下 新增 個屬性,並賦...

gin系列 中介軟體

gin框架允許開發者在處理請求的過程中,加入使用者自己的鉤子 hook 函式。這個鉤子函式就叫中介軟體,中介軟體適合處理一些公共的業務邏輯,比如登入認證 許可權校驗 資料分頁 記錄日誌 耗時統計等 定義中介軟體 gin中的中介軟體必須是乙個gin.handlerfunc型別 入門案例 定義乙個中介軟...

gin框架中介軟體詳解

gin框架涉及中介軟體相關有4個常用的方法,它們分別是c.next c.abort c.set c.get gin框架中的中介軟體設計很巧妙,我們可以首先從我們最常用的r gin.default 的default函式開始看,它內部構造乙個新的engine之後就通過use 函式註冊了logger中介軟...