Maison > développement back-end > Golang > Comment transmettre les données du middleware aux gestionnaires dans Go ?

Comment transmettre les données du middleware aux gestionnaires dans Go ?

Barbara Streisand
Libérer: 2024-11-15 04:50:03
original
914 Les gens l'ont consulté

How to Pass Data from Middleware to Handlers in Go?

Comment transmettre les données du middleware aux gestionnaires

Dans ce scénario, vous utilisez un middleware qui analyse un JWT du corps de la requête et souhaitez le transmettre à vos gestionnaires pour éviter une analyse redondante. Étant donné que votre middleware renvoie un http.Handler et que vos gestionnaires renvoient également un http.Handler, il est nécessaire de trouver un moyen de transmettre le JWT entre eux.

Une approche recommandée consiste à utiliser le package de contexte de Gorilla Mux. Le package de contexte vous permet de stocker les valeurs associées à une requête de manière sécurisée.

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.
    })
}
Copier après la connexion

En utilisant le package de contexte, vous pouvez stocker le JWT analysé dans le contexte de la requête au sein du middleware et accéder facilement dans vos gestionnaires sans avoir besoin d'une nouvelle analyse.

Mise à jour :

Ça vaut la peine notant que le package contextuel Gorilla est désormais en mode maintenance. Pour les nouveaux projets, il est recommandé d'utiliser la fonctionnalité context.Context() introduite dans Go 1.7, qui offre un moyen plus robuste et efficace de gérer les données contextuelles des requêtes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal