package auth import ( "net/http" "strings" "git.x2erp.com/qdy/go-base/config" "git.x2erp.com/qdy/go-base/ctx" "git.x2erp.com/qdy/go-base/logger" ) // // 全局配置(单例) // var appConfig config.IConfig // // ResponseFormat 响应格式 // type ResponseFormat int // const ( // FormatJSON ResponseFormat = iota // FormatCSV // ) // // JWTAuthMiddlewareInit 初始化中间件配置 // func JWTAuthMiddlewareInit(config config.IConfig) { // appConfig = config // } // JWT认证中间件(支持指定响应格式) func TokenAuth(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // 从Header获取Authorization authHeader := r.Header.Get("Authorization") // 检查Authorization头是否存在 if authHeader == "" { unauthorized(w, "Authorization header is required") } // 检查Bearer格式 if !strings.HasPrefix(authHeader, "Bearer ") { unauthorized(w, "Authorization header must start with 'Bearer '") } token := strings.TrimPrefix(authHeader, "Bearer ") // 验证JWT令牌 if !isValidToken(token) { unauthorized(w, "Invalid token") } appConfig := config.GetConfig() //保存上下文 // 创建LoggerContext(从token解析用户信息) requestContext := &ctx.RequestContext{ ServiceName: appConfig.GetServiceConfig().ServiceName, InstanceName: appConfig.GetServiceConfig().InstanceName, TraceID: "trace_id-123", // 生成追踪ID TenantID: "tenant-123", // 从token解析 UserID: "user-456", // 从token解析 } if logger.IsDebug() { logger.DebugC(requestContext, "Before save requestContext: %+v", requestContext) } // 保存到请求 r = ctx.SaveContext(r, requestContext) // 继续处理请求 next.ServeHTTP(w, r) }) } // 验证令牌(需要根据实际项目实现) func isValidToken(token string) bool { // TODO: 实现真正的JWT验证逻辑 // 暂时简化处理 return token != "" }