이 시나리오에서는 요청 본문에서 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!