在这种情况下,您使用的中间件从请求正文中解析 JWT 并希望将其传递给您的处理程序以避免冗余解析。由于您的中间件返回一个 http.Handler 并且您的处理程序也返回一个 http.Handler,因此有必要找到一种在它们之间传递 JWT 的方法。
一种推荐的方法是利用 Gorilla Mux 中的 context 包。 context 包允许您以类型安全的方式存储与请求关联的值。
import ( "github.com/gorilla/context" ) // Middleware serves as a wrapper around the next handler. func Middleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Middleware operations // Parse body/get token. token, err := getTokenFromRequest(r) if err != nil { http.Error(w, "Error getting token", http.StatusInternalServerError) return } context.Set(r, "token", token) next.ServeHTTP(w, r) }) } // Handler retrieves the JWT from the request context. func Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := context.Get(r, "token") // Use the token in your handler logic. }) }
通过使用 context 包,您可以将解析后的 JWT 存储在中间件的请求上下文中并轻松访问它在你的处理程序中,而不需要重新解析。
更新:
值得注意的是,Gorilla 上下文包现在处于维护模式。对于新项目,建议使用 Go 1.7 中引入的 context.Context() 功能,它提供了更健壮、更高效的管理请求上下文数据的方法。
以上是如何在 Go 中将数据从中间件传递到处理程序?的详细内容。更多信息请关注PHP中文网其他相关文章!