package http_gateway import ( "fmt" "git.hlsq.asia/mmorpg/service-common/net/http/http_resp" "git.hlsq.asia/mmorpg/service-common/utils" "git.hlsq.asia/mmorpg/service-gateway/config" "github.com/gin-contrib/cors" "github.com/gin-gonic/gin" "go.uber.org/zap" "strings" "time" ) func corsConfig() cors.Config { return cors.Config{ AllowMethods: []string{"GET", "POST", "OPTIONS"}, AllowHeaders: []string{"Content-Type", "Authorization"}, AllowCredentials: false, AllowAllOrigins: true, MaxAge: 12 * time.Hour, } } func ginLogger(logger *zap.SugaredLogger) gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() path := c.Request.URL.Path c.Next() cost := time.Since(start) logger.Infof(fmt.Sprintf( "HTTP Method:%v Code:%v Time:%v IP:%v Path:%v", c.Request.Method, c.Writer.Status(), cost, c.ClientIP(), path), ) } } func authJwt() gin.HandlerFunc { return func(c *gin.Context) { pList := strings.SplitN(c.Request.URL.Path, "/", 4) if len(pList) < 4 || pList[2] == "" { http_resp.JsonNotFound(c) return } // 如果是Public接口,有Token就读,没有就算了 public := pList[2] == "open" token := strings.TrimPrefix(c.GetHeader("Authorization"), "Bearer ") if token == "" { if public { c.Next() return } http_resp.JsonUnauthorized(c) c.Abort() return } claims, err := utils.ParseToken(token, config.Get().Auth.Secret) if err != nil { http_resp.JsonUnauthorized(c) c.Abort() return } // 这里将Header写到请求中,grpc-gateway框架会读取然后传给grpc服务 c.Request.Header.Set("X-Usn", claims.USN) c.Next() } }