首頁 >後端開發 >Golang >如何在 Negroni 中實作特定於路由的中間件?

如何在 Negroni 中實作特定於路由的中間件?

DDD
DDD原創
2024-10-24 08:30:301041瀏覽

How to Implement Route-Specific Middleware in Negroni?

使用Negroni 的路由特定中間件

簡介

在Web 伺服器中實現身分驗證機制對於保護使用者資料和安全至關重要控制對受保護資源的存取。當使用 httprouter 套件進行路由並使用 Negroni 進行中間件管理時,您可能會遇到需要從驗證中排除特定路由的情況。本文探討如何在 Negroni 中實作特定於路由的中間件。

問題陳述

給定一個使用httprouter 和Negroni 的伺服器設置,目標是實現一個身份驗證處理程序(authenticator.Get()) 並將其應用於除一個路由之外的所有路由(例如“/login”)。

解決方案

針對 Negroni 的特定於路由的中間件,我們需要為每條路線建立單獨的 Negroni 實例。在提供的範例中,為“/login”和“/”建立單獨的 Negroni 實例。僅使用 loginHandler 將「/login」路由排除在身份驗證之外,而「/」路由同時使用authenticator.Get() 和indexHandler。

實作

<code class="go">router := httprouter.New()
router.Handler("GET", "/login",
    negroni.New(negroni.HandlerFunc(loginHandler)))
router.Handler("GET", "/",
    negroni.New(authenticator.Get(),
    negroni.HandlerFunc(indexHandler)))

server := negroni.Classic()
server.UseHandler(router)
server.Use(sessions.Sessions("example-web-dev",
        cookiestore.New([]byte("some secret"))))
server.Run(":3000")</code>

要點

  • loginHandler 和indexHandler 必須實作http.Request, http.HandlerFunc) 簽名。
  • 所有路由都會繼承 negroni.Classic() 的中間件以及新增到伺服器的會話中間件。
  • 特定於路由的中間件是透過為每個路由嵌套具有不同中間件堆疊的 Negroni 實例來應用的。

以上是如何在 Negroni 中實作特定於路由的中間件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn