| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- 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 != ""
- }
|