From 84d2953e7b641600779e7aecc80bdd35e96d31d6 Mon Sep 17 00:00:00 2001 From: jiangshuai <291802688@qq.com> Date: 星期二, 06 二月 2024 10:13:12 +0800 Subject: [PATCH] 拦截器 --- middleware/jwt.go | 68 +++++++--------------------------- 1 files changed, 14 insertions(+), 54 deletions(-) diff --git a/middleware/jwt.go b/middleware/jwt.go index 4db632f..42ce6e0 100644 --- a/middleware/jwt.go +++ b/middleware/jwt.go @@ -1,78 +1,38 @@ package middleware import ( - "errors" - "github.com/golang-jwt/jwt/v4" - "strconv" - "time" - - "srm/utils" - - "srm/global" - "srm/model/common/response" - "srm/model/system" - "srm/service" - "github.com/gin-gonic/gin" - "go.uber.org/zap" + "srm/pkg/contextx" + "srm/pkg/ecode" + "strings" ) - -var jwtService = service.ServiceGroupApp.SystemServiceGroup.JwtService func JWTAuth() gin.HandlerFunc { return func(c *gin.Context) { - // 鎴戜滑杩欓噷jwt閴存潈鍙栧ご閮ㄤ俊鎭� x-token 鐧诲綍鏃跺洖杩斿洖token淇℃伅 杩欓噷鍓嶇闇�瑕佹妸token瀛樺偍鍒癱ookie鎴栬�呮湰鍦發ocalStorage涓� 涓嶈繃闇�瑕佽窡鍚庣鍗忓晢杩囨湡鏃堕棿 鍙互绾﹀畾鍒锋柊浠ょ墝鎴栬�呴噸鏂扮櫥褰� - token := c.Request.Header.Get("x-token") + ctx := new(contextx.Context).SetCtx(c) + // 鎴戜滑杩欓噷jwt閴存潈鍙栧ご閮ㄤ俊鎭� Authorization 鐧诲綍鏃跺洖杩斿洖token淇℃伅 杩欓噷鍓嶇闇�瑕佹妸token瀛樺偍鍒癱ookie鎴栬�呮湰鍦發ocalStorage涓� 涓嶈繃闇�瑕佽窡鍚庣鍗忓晢杩囨湡鏃堕棿 鍙互绾﹀畾鍒锋柊浠ょ墝鎴栬�呴噸鏂扮櫥褰� + token := c.Request.Header.Get("Authorization") if token == "" { - response.FailWithDetailed(gin.H{"reload": true}, "鏈櫥褰曟垨闈炴硶璁块棶", c) + ctx.Fail(ecode.JWTEmpty) c.Abort() return } - if jwtService.IsBlacklist(token) { - response.FailWithDetailed(gin.H{"reload": true}, "鎮ㄧ殑甯愭埛寮傚湴鐧婚檰鎴栦护鐗屽け鏁�", c) - c.Abort() - return + slices := strings.Split(token, " ") + if len(slices) == 2 { + token = slices[1] } - j := utils.NewJWT() + j := NewJWT() // parseToken 瑙f瀽token鍖呭惈鐨勪俊鎭� claims, err := j.ParseToken(token) if err != nil { - if errors.Is(err, utils.TokenExpired) { - response.FailWithDetailed(gin.H{"reload": true}, "鎺堟潈宸茶繃鏈�", c) - c.Abort() + if err == TokenExpired { + c.Next() return } - response.FailWithDetailed(gin.H{"reload": true}, err.Error(), c) - c.Abort() + c.Next() return } - // 宸茬櫥褰曠敤鎴疯绠$悊鍛樼鐢� 闇�瑕佷娇璇ョ敤鎴风殑jwt澶辨晥 姝ゅ姣旇緝娑堣�楁�ц兘 濡傛灉闇�瑕� 璇疯嚜琛屾墦寮� - // 鐢ㄦ埛琚垹闄ょ殑閫昏緫 闇�瑕佷紭鍖� 姝ゅ姣旇緝娑堣�楁�ц兘 濡傛灉闇�瑕� 璇疯嚜琛屾墦寮� - - //if user, err := userService.FindUserByUuid(claims.UUID.String()); err != nil || user.Enable == 2 { - // _ = jwtService.JsonInBlacklist(system.JwtBlacklist{Jwt: token}) - // response.FailWithDetailed(gin.H{"reload": true}, err.Error(), c) - // c.Abort() - //} - if claims.ExpiresAt.Unix()-time.Now().Unix() < claims.BufferTime { - dr, _ := utils.ParseDuration(global.GVA_CONFIG.JWT.ExpiresTime) - claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(dr)) - newToken, _ := j.CreateTokenByOldToken(token, *claims) - newClaims, _ := j.ParseToken(newToken) - c.Header("new-token", newToken) - c.Header("new-expires-at", strconv.FormatInt(newClaims.ExpiresAt.Unix(), 10)) - if global.GVA_CONFIG.System.UseMultipoint { - RedisJwtToken, err := jwtService.GetRedisJWT(newClaims.Username) - if err != nil { - global.GVA_LOG.Error("get redis jwt failed", zap.Error(err)) - } else { // 褰撲箣鍓嶇殑鍙栨垚鍔熸椂鎵嶈繘琛屾媺榛戞搷浣� - _ = jwtService.JsonInBlacklist(system.JwtBlacklist{Jwt: RedisJwtToken}) - } - // 鏃犺濡備綍閮借璁板綍褰撳墠鐨勬椿璺冪姸鎬� - _ = jwtService.SetRedisJWT(newToken, newClaims.Username) - } - } c.Set("claims", claims) c.Next() } -- Gitblit v1.8.0