「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Golang でミドルウェアからハンドラーにデータを渡すにはどうすればよいですか?

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

2024 年 11 月 15 日に公開
ブラウズ:658

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 を再度解析する必要がなくなります。

更新:

ゴリラ コンテキスト パッケージは現在メンテナンス中です。 mode.

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