W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
beego 支持自定義過濾中間件,例如安全驗證,強制跳轉(zhuǎn)等。
過濾器函數(shù)如下所示:
beego.InsertFilter(pattern string, position int, filter FilterFunc, params ...bool)
InsertFilter 函數(shù)的三個必填參數(shù),一個可選參數(shù)
AddFilter 從beego1.3 版本開始已經(jīng)廢除
如下例子所示,驗證用戶是否已經(jīng)登錄,應(yīng)用于全部的請求:
var FilterUser = func(ctx *context.Context) {
_, ok := ctx.Input.Session("uid").(int)
if !ok && ctx.Request.RequestURI != "/login" {
ctx.Redirect(302, "/login")
}
}
beego.InsertFilter("/*",beego.BeforeRouter,FilterUser)
這里需要特別注意使用 session 的 Filter 必須在 BeforeStatic 之后才能獲取,因為 session 沒有在這之前初始化。
還可以通過正則路由進行過濾,如果匹配參數(shù)就執(zhí)行:
var FilterUser = func(ctx *context.Context) {
_, ok := ctx.Input.Session("uid").(int)
if !ok {
ctx.Redirect(302, "/login")
}
}
beego.InsertFilter("/user/:id([0-9]+)",beego.BeforeRouter,FilterUser)
beego1.1.2 開始 Context.Input 中增加了 RunController 和 RunMethod, 這樣我們就可以在執(zhí)行路由查找之前,在 filter 中實現(xiàn)自己的路由規(guī)則.
如下示例實現(xiàn)了如何實現(xiàn)自己的路由規(guī)則:
var UrlManager = func(ctx *context.Context) {
// 數(shù)據(jù)庫讀取全部的 url mapping 數(shù)據(jù)
urlMapping := model.GetUrlMapping()
for baseurl,rule:=range urlMapping {
if baseurl == ctx.Request.RequestURI {
ctx.Input.RunController = rule.controller
ctx.Input.RunMethod = rule.method
break
}
}
}
beego.InsertFilter("/*",beego.BeforeRouter,UrlManager)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: