W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
beego 支持自定義過濾中間件,例如安全驗(yàn)證,強(qiáng)制跳轉(zhuǎn)等。
過濾器函數(shù)如下所示:
beego.InsertFilter(pattern string, position int, filter FilterFunc, params ...bool)
InsertFilter 函數(shù)的三個(gè)必填參數(shù),一個(gè)可選參數(shù)
AddFilter 從beego1.3 版本開始已經(jīng)廢除
如下例子所示,驗(yàn)證用戶是否已經(jīng)登錄,應(yīng)用于全部的請(qǐ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 之后才能獲取,因?yàn)?session 沒有在這之前初始化。
還可以通過正則路由進(jìn)行過濾,如果匹配參數(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 中實(shí)現(xiàn)自己的路由規(guī)則.
如下示例實(shí)現(xiàn)了如何實(shí)現(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號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: