)
分組路由使**邏輯更加模組化,同時也易於定義中介軟體的使用範圍
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中介軟...