>백엔드 개발 >Golang >Go에서 미들웨어의 데이터를 핸들러로 전달하는 방법은 무엇입니까?

Go에서 미들웨어의 데이터를 핸들러로 전달하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-15 04:50:03915검색

How to Pass Data from Middleware to Handlers in Go?

미들웨어에서 핸들러로 데이터를 전달하는 방법

이 시나리오에서는 요청 본문에서 JWT를 구문 분석하고 이를 핸들러에 전달하려고 하는 미들웨어를 사용하고 있습니다. 중복된 구문 분석을 피하기 위해 핸들러를 사용하세요. 미들웨어가 http.Handler를 반환하고 핸들러도 http.Handler를 반환하므로 둘 사이에 JWT를 전달할 방법을 찾아야 합니다.

권장되는 접근 방식 중 하나는 Gorilla Mux의 컨텍스트 패키지를 활용하는 것입니다. 컨텍스트 패키지를 사용하면 유형이 안전한 방식으로 요청과 관련된 값을 저장할 수 있습니다.

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.
    })
}

컨텍스트 패키지를 활용하면 파싱된 JWT를 미들웨어 내의 요청 컨텍스트에 저장하고 쉽게 액세스할 수 있습니다. 필요 없이 핸들러 내에서 다시 구문 분석합니다.

업데이트:

Gorilla 컨텍스트 패키지가 현재 유지 관리 모드에 있다는 점은 주목할 가치가 있습니다. 새 프로젝트의 경우 요청 컨텍스트 데이터를 관리하는 보다 강력하고 효율적인 방법을 제공하는 Go 1.7에 도입된 context.Context() 기능을 사용하는 것이 좋습니다.

위 내용은 Go에서 미들웨어의 데이터를 핸들러로 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.