"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 미들웨어에서 Golang의 핸들러로 데이터를 어떻게 전달할 수 있나요?

미들웨어에서 Golang의 핸들러로 데이터를 어떻게 전달할 수 있나요?

2024년 11월 15일에 게시됨
검색:329

How Can I Pass Data from Middleware to Handlers in Golang?

미들웨어에서 핸들러로 데이터 전달

설계에는 들어오는 요청을 처리하는 미들웨어와 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