將資料從中間件傳遞到處理程序
在您的設計中,您有處理傳入請求的中間件和返回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")token := context.Get(r, "token")
這使您可以避免再次解析JWT
更新:
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") }) }Gorilla 上下文套件目前處於維護模式。
func Middleware(next http.處理程序) http.Handler { 返回 http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 中介軟體操作 // 解析正文/取得令牌。 ctx := context.WithValue(r.Context(), "令牌", 令牌) next.ServeHTTP(w, r.WithContext(ctx)) }) } func Handler() http.Handler { 返回 http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 令牌 := r.Context().Value("令牌") }) }
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3