Beego請求中間件(過濾器) | 用戶登錄驗證 | Beego


參考:過濾器

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)

 或者:

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)

beego 支持自定義過濾中間件,例如安全驗證,強制跳轉等。

過濾器函數如下所示:

  1. beego.InsertFilter(pattern string, position int, filter FilterFunc, params ...bool)

InsertFilter 函數的三個必填參數,一個可選參數

  • pattern 路由規則,可以根據一定的規則進行路由,如果你全匹配可以用 *
  • position 執行 Filter 的地方,五個固定參數如下,分別表示不同的執行過程
    • BeforeStatic 靜態地址之前
      • BeforeRouter 尋找路由之前
      • BeforeExec 找到路由之后,開始執行相應的 Controller 之前
      • AfterExec 執行完 Controller 邏輯之后執行的過濾器
      • FinishRouter 執行完邏輯之后執行的過濾器
  • filter filter 函數 type FilterFunc func(*context.Context)
  • params
  • 設置 returnOnOutput 的值(默認 true), 如果在進行到此過濾之前已經有輸出,是否不再繼續執行此過濾器,默認設置為如果前面已有輸出(參數為true),則不再執行此過濾器
  • 是否重置 filters 的參數,默認是 false,因為在 filters 的 pattern 和本身的路由的 pattern 沖突的時候,可以把 filters 的參數重置,這樣可以保證在后續的邏輯中獲取到正確的參數,例如設置了 /api/* 的 filter,同時又設置了 /api/docs/* 的 router,那么在訪問 /api/docs/swagger/abc.js 的時候,在執行 filters 的時候設置 :splat 參數為 docs/swagger/abc.js,但是如果不清楚 filter 的這個路由參數,就會在執行路由邏輯的時候保持 docs/swagger/abc.js,如果設置了 true,就會重置 :splat 參數.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM