„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann ich Daten von der Middleware an Handler in Golang übergeben?

Wie kann ich Daten von der Middleware an Handler in Golang übergeben?

Veröffentlicht am 15.11.2024
Durchsuche:256

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

Daten von Middleware an Handler übergeben

In Ihrem Design verfügen Sie über Middleware, die eine eingehende Anfrage verarbeitet, und Handler, die einen http.Handler zurückgeben . Sie möchten Daten von der Middleware an die Handler übergeben, insbesondere ein JSON-Web-Token, das aus dem Anforderungstext geparst wird.

Um dies zu erreichen, können Sie das Kontextpaket von Gorilla verwenden:

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

In der Middleware analysieren Sie den Anfragetext und speichern das JWT im Anfragekontext. Dann können Sie im Handler das JWT aus dem Kontext abrufen:

token := context.Get(r, "token")

Dadurch können Sie vermeiden, das JWT erneut zu analysieren Ihre Handler, was effizienter ist.

Update:

Das Gorilla-Kontextpaket befindet sich derzeit in der Wartung 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")
    })
}
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3