Maison > développement back-end > Golang > Comment puis-je transmettre et accéder aux informations contextuelles dans les gestionnaires HTTP et le middleware Go ?

Comment puis-je transmettre et accéder aux informations contextuelles dans les gestionnaires HTTP et le middleware Go ?

Susan Sarandon
Libérer: 2024-11-16 04:17:03
original
844 Les gens l'ont consulté

How can I pass and access context information in Go HTTP Handlers and Middleware?

Passage du contexte dans Middleware et HandlerFunc

Dans Go, le package de contexte fournit une fonctionnalité permettant de transmettre des informations entre les gestionnaires de requêtes. Ceci est particulièrement utile pour les middlewares, qui peuvent effectuer des actions avant et après l'exécution d'une fonction de gestionnaire.

Création et transmission de contexte

Dans le contexte du middleware, nous peut créer un nouveau contexte en appelant context.WithValue sur le contexte de la demande, en fournissant une paire clé et valeur. Ce nouveau contexte doit ensuite être utilisé lors de l'appel de la méthode ServeHTTP du gestionnaire.

Par exemple, dans l'extrait de code fourni, la fonction middleware checkAuth reçoit le contexte de la demande et le jeton d'authentification en entrée. Il renvoie une fonction de gestionnaire encapsulée qui vérifie le jeton d'authentification.

func checkAuth(authToken string) util.Middleware {
    return func(h http.Handler) http.Handler {
        return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
            if r.Header.Get("Auth") != authToken {
                util.SendError(w, "...", http.StatusForbidden, false)
                return
            }
            h.ServeHTTP(w, r)
        })
    }
}
Copier après la connexion

Pour initialiser le contexte avec le jeton d'authentification, nous pouvons appeler context.WithValue sur le contexte de la requête, comme indiqué ci-dessous :

func main() {
    authToken, ok := getAuthToken()
    if !ok {
        panic("...")
    }
    ctx := context.WithValue(r.Context(), "auth_token", authToken)
    router.Handle("/hello", util.UseMiddleware(authCheck, Handler, ...))
}
Copier après la connexion

Ce nouveau contexte sera ensuite utilisé lorsque le gestionnaire de middleware appellera le ServeHTTP du gestionnaire d'origine. méthode.

Accès au contexte dans les gestionnaires

Le gestionnaire peut accéder aux informations de contexte en appelant r.Context(), qui renvoie le contexte actuel. La valeur peut être récupérée à l'aide de la méthode Value, comme indiqué dans l'extrait de code ci-dessous :

func (h *HandlerW) ServeHTTP(w http.ResponseWriter, r *http.Request) {
    authToken := r.Context().Value("auth_token").(string)
    // ...
}
Copier après la connexion

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