ホームページ >バックエンド開発 >Golang >Golang でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?

Golang でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?

DDD
DDDオリジナル
2024-11-10 09:50:02645ブラウズ

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

ミドルウェアからハンドラーへのデータの受け渡し

設計には、受信リクエストを処理するミドルウェアと http.Handler を返すハンドラーがあります。 。ミドルウェアからハンドラーにデータ、具体的にはリクエスト本文から解析された JSON Web トークンを渡したいと考えています。

これを実現するには、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")
    })
}

以上がGolang でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。