Heim >Backend-Entwicklung >Golang >Legen Sie unterschiedliche Middleware für Unterrouten in Go-Chi fest
In Go-Chi, dem Web-Framework der Go-Sprache, ist das Festlegen unterschiedlicher Middleware für Unterrouten eine häufige Anforderung. Middleware ist eine Funktion, die HTTP-Anfragen und -Antworten verarbeitet und einige zusätzliche Vorgänge ausführen kann, bevor und nachdem die Anfrage den Zielprozessor erreicht. Durch die Einrichtung unterschiedlicher Middleware für verschiedene Unterrouten können wir jede Unterroute entsprechend den Geschäftsanforderungen personalisieren. In diesem Artikel stellen wir vor, wie Sie verschiedene Middleware für Unterrouten in Go-Chi flexibel einrichten, um eine flexiblere Routing-Verarbeitung zu erreichen.
Ich habe einen Proxyserver, der über die Konfiguration mit mustBeSecure
deaktiviert werden kann. Ich möchte, dass sich dieser Proxy in einer bestimmten Subdomäne anders verhält: „/application/health“, wodurch er immer unsicher wird. Alle Änderungen, die ich bisher versucht habe, sind fehlgeschlagen. Gibt es eine Möglichkeit, eine andere Gruppe für „/application/health“ zu konfigurieren, die weiterhin den Proxy verwendet, aber nie eine Authentifizierung erfordert?
router := chi.NewRouter() router.Route("/", func(r chi.Router) { r.Use(chimw.Recoverer) router.Use(hlog.NewHandler(log.Logger)) if mustBeSecure() { r.Use(keycloak.MustStandardKeycloakAuth("url")) } setProxy(r) r.Group(func(r chi.Router) { r.Get("/health", handleHealth()) }) }) return http.ListenAndServe("0.0.0.0", router)
Wie gewünscht, hier ein Beispiel für setProxy()
func setProxy(r chi.Router) { r.Route("/application", func(r chi.Router) { r.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ctx := context.WithValue(r.Context(), "target", "http:locahost:9999") r = r.WithContext(ctx) next.ServeHTTP(w, r) }) }) r.HandleFunc("/*", httputil.ReverseProxy{}.ServeHTTP) }) }
Ich glaube, Sie versuchen das.
/application
RoutenGET /health
/application
) für alle anderen RoutenIch habe den Code zum leichteren Verständnis etwas vereinfacht. Sie können weiterhin die setProxy
-Funktion verwenden.
func main() { proxy, err := NewProxy("http://localhost:4422") if err != nil { panic(err) } router := chi.NewRouter() router.Get("/health", handleHealth) router.Route("/application", func(r chi.Router) { r.Get("/health", ProxyRequestHandler(proxy)) r.Group(func(r chi.Router) { if mustBeSecure() { r.Use(keycloak.MustStandardKeycloakAuth("url")) } r.HandleFunc("/*", ProxyRequestHandler(proxy)) }) }) http.ListenAndServe("0.0.0.0:4411", router) } func NewProxy(targetHost string) (*httputil.ReverseProxy, error) { targetUrl, err := url.Parse(targetHost) if err != nil { return nil, err } return httputil.NewSingleHostReverseProxy(targetUrl), nil } func ProxyRequestHandler(proxy *httputil.ReverseProxy) func(http.ResponseWriter, *http.Request) { return func(w http.ResponseWriter, r *http.Request) { proxy.ServeHTTP(w, r) } }
Das obige ist der detaillierte Inhalt vonLegen Sie unterschiedliche Middleware für Unterrouten in Go-Chi fest. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!