将数据从中间件传递到处理程序
在您的设计中,您有处理传入请求的中间件和返回 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中文网其他相关文章!