將資料從中間件傳遞到處理程序
在您的設計中,您有處理傳入請求的中間件和返回http.Handler 的處理程序。您想要將資料從中間件傳遞到處理程序,特別是從請求正文解析的 JSON Web 令牌。
要實現此目的,您可以利用 Gorilla 的上下文包:
import ( "github.com/gorilla/context" ) func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. context.Set(r, "token", token) next.ServeHTTP(w, r) }) } func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") }) }
中在中間件中,您解析請求正文並將 JWT 儲存在請求上下文中。然後,在處理程序中,您可以從上下文中檢索 JWT:
token := context.Get(r, "token")
這使您可以避免在處理程序中再次解析 JWT,從而更加高效。
更新:
Gorilla 上下文套件目前處於維護模式。
func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. ctx := context.WithValue(r.Context(), "token", token) next.ServeHTTP(w, r.WithContext(ctx)) }) } func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := r.Context().Value("token") }) }
以上是如何在 Golang 中將資料從中間件傳遞到處理程序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!