Передача данных из промежуточного программного обеспечения в обработчики
В вашем проекте есть промежуточное программное обеспечение, которое обрабатывает входящий запрос, и обработчики, возвращающие http.Handler . Вы хотите передать данные из промежуточного программного обеспечения обработчикам, в частности веб-токен JSON, проанализированный из тела запроса.
Для достижения этого вы можете использовать контекстный пакет 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") }) }
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3