go 框架中的中间件是增强应用程序功能的工具,允许在请求处理过程中拦截和修改请求和响应。使用步骤如下:创建中间件函数,处理请求和响应,并返回一个 http 处理程序。在应用程序的路由器中注册中间件,可以为单个路由注册多个中间件。实战案例:为 api 添加身份验证,使用中间件来验证请求中的 jwt 令牌,并从 token 中提取用户信息添加到上下文中。
Go 框架中的中间件指南
中间件是一种强大的工具,可用于增强 Go 应用程序的功能,它允许您在请求处理过程中拦截和修改请求和响应。这是如何使用它们:
1. 创建中间件函数
创建一个函数来处理请求和响应。这个函数应接受 http.Handler 并返回 http.Handler,例如:
func AuthMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 验证请求中的令牌 err := verifyToken(r) if err != nil { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } // 调用下一个处理程序 next.ServeHTTP(w, r) }) }
2. 注册中间件
在应用程序的路由器中注册中间件。您可以在单个路由上注册多个中间件,例如:
func main() { router := mux.NewRouter() router.Use(AuthMiddleware) // 全局应用 router.HandleFunc("/users", UserHandler).Methods("GET") // ... 其余路由 }
3. 实战案例
需求: 为 API 添加身份验证,要求用户在访问受保护的端点之前进行身份验证。
解决方案: 使用中间件来验证请求中的 JWT 令牌:
func AuthMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 从请求中提取令牌 tokenHeader := r.Header.Get("Authorization") if tokenHeader == "" { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } // 验证令牌 claims, err := verifyJWT(tokenHeader) if err != nil || !claims.Valid() { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } // 添加用户 ID 到上下文 ctx := context.WithValue(r.Context(), "user_id", claims.Subject) r = r.WithContext(ctx) // 调用下一个处理程序 next.ServeHTTP(w, r) }) }
注意:
- 中间件可以用于多种目的,例如:身份验证、日志记录、缓存和错误处理。
- 您可以在请求和响应过程中访问和修改 HTTP 头和正文。
- 中间件可以串联使用,形成处理链。
golang免费学习笔记(深入):立即学习
在学习笔记中,你将探索 的核心概念和高级技巧!
想要了解更多内容,请持续关注码农资源网,一起探索发现编程世界的无限可能!
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » golang框架如何使用中间件?
本站部分资源来源于网络,仅限用于学习和研究目的,请勿用于其他用途。
如有侵权请发送邮件至1943759704@qq.com删除
码农资源网 » golang框架如何使用中间件?