Golang Gin框架中如何为特定路由应用中间件并排除注册登录路由?
嘿,这个问题很好解决~核心思路就是把不需要中间件的开放路由和需要验证的路由分开处理,不让中间件拦截/signup和/login这两个路径就行。
给你两种常见的实现方式,看你哪种更适配你的代码结构:
方式一:分路由组注册(推荐,更清晰)
如果用的是gorilla/mux这类支持路由组的库,直接把开放路由单独注册,剩下的路由放到带中间件的组里:
// 先注册无需验证的开放路由,直接绑定handler,不走中间件 router.HandleFunc("/signup", controller.SaveUser).Methods("POST") router.HandleFunc("/login", controller.Login).Methods("POST") // 创建一个需要验证的路由组,统一应用你的中间件 authRequiredGroup := router.PathPrefix("/").Subrouter() authRequiredGroup.Use(YourAuthMiddleware) // 替换成你的中间件函数 // 把所有需要验证的路由注册到这个组里 authRequiredGroup.HandleFunc("/customers", controller.SaveCustomers).Methods("POST") // 其他需要中间件的路由都往这里加...
方式二:遍历路由时判断路径
如果是用你自己定义的Route结构体数组来批量注册,可以在遍历的时候跳过开放路由的中间件:
// 先把开放路由的路径存到一个map里,方便判断(后续加新开放路由直接在这里加就行) openRoutes := map[string]bool{ "/signup": true, "/login": true, } // 遍历你的路由列表 for _, route := range routes { // 先拿到原始handler var handler http.Handler = route.Handler // 不是开放路由的话,才应用中间件 if !openRoutes[route.Path] { handler = YourAuthMiddleware(handler) } // 注册路由 router.HandleFunc(route.Path, handler.ServeHTTP).Methods(route.Method) }
这样处理后,/signup和/login就会直接跳过你的中间件,对所有用户开放,其他路由则会正常经过中间件验证啦~
内容的提问来源于stack exchange,提问作者user9684058
相关产品推荐
相关产品推荐

