From 005b73e2dbde1077311cb53498fcd6ff6550ed6a Mon Sep 17 00:00:00 2001 From: samwaf Date: Fri, 2 May 2025 17:14:20 +0800 Subject: [PATCH] feat:reboot app cache token lost #250 --- service/waf_service/waf_token_info.go | 64 +++++++++++++++++++++++++++ wafmangeweb/localserver.go | 6 ++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/service/waf_service/waf_token_info.go b/service/waf_service/waf_token_info.go index cc0839e..5d6120b 100644 --- a/service/waf_service/waf_token_info.go +++ b/service/waf_service/waf_token_info.go @@ -3,6 +3,7 @@ package waf_service import ( "SamWaf/common/uuid" "SamWaf/customtype" + "SamWaf/enums" "SamWaf/global" "SamWaf/model" "SamWaf/model/baseorm" @@ -115,3 +116,66 @@ func (receiver *WafTokenInfoService) DelApiByAccount(loginAccount string) error err = global.GWAF_LOCAL_DB.Where("login_account = ?", loginAccount).Delete(model.TokenInfo{}).Error return err } + +/* +* 检测所有的token是否过期,没有过期就重新加载到cache + */ +func (receiver *WafTokenInfoService) ReloadAllValidTokensToCache() error { + var tokens []model.TokenInfo + // 获取所有token信息 + err := global.GWAF_LOCAL_DB.Find(&tokens).Error + if err != nil { + return err + } + + // 当前时间 + now := time.Now() + + // 遍历所有token + for _, token := range tokens { + // 检查token是否过期 + // 假设token的过期时间存储在UPDATE_TIME字段中,并且有一个固定的过期时间 + expireTime := time.Time(token.UPDATE_TIME).Add(time.Duration(global.GCONFIG_RECORD_TOKEN_EXPIRE_MINTUTES) * time.Minute) + + // 如果token没有过期,则重新加载到缓存中 + if expireTime.After(now) { + // 将token信息存入缓存 + global.GCACHE_WAFCACHE.SetWithTTl( + enums.CACHE_TOKEN+token.AccessToken, + token, + time.Duration(global.GCONFIG_RECORD_TOKEN_EXPIRE_MINTUTES)*time.Minute, + ) + } + } + + return nil +} + +// 根据数据库中的特定token信息重新加载到缓存 +func (receiver *WafTokenInfoService) ReloadSpecificTokenToCache(tokenId string) error { + var token model.TokenInfo + // 根据ID获取token信息 + err := global.GWAF_LOCAL_DB.Where("id = ?", tokenId).First(&token).Error + if err != nil { + return err + } + + // 当前时间 + now := time.Now() + + // 检查token是否过期 + expireTime := time.Time(token.UPDATE_TIME).Add(time.Duration(global.GCONFIG_RECORD_TOKEN_EXPIRE_MINTUTES) * time.Minute) + + // 如果token没有过期,则重新加载到缓存中 + if expireTime.After(now) { + // 将token信息存入缓存 + global.GCACHE_WAFCACHE.SetWithTTl( + enums.CACHE_TOKEN+token.AccessToken, + token, + time.Duration(global.GCONFIG_RECORD_TOKEN_EXPIRE_MINTUTES)*time.Minute, + ) + return nil + } + + return errors.New("token已过期") +} diff --git a/wafmangeweb/localserver.go b/wafmangeweb/localserver.go index 2c0e938..abec7cd 100644 --- a/wafmangeweb/localserver.go +++ b/wafmangeweb/localserver.go @@ -5,6 +5,7 @@ import ( "SamWaf/global" "SamWaf/middleware" "SamWaf/router" + "SamWaf/service/waf_service" "SamWaf/wafmangeweb/static" "context" "errors" @@ -135,7 +136,10 @@ func (web *WafWebManager) StartLocalServer() error { Addr: ":" + strconv.Itoa(global.GWAF_LOCAL_SERVER_PORT), Handler: r, } - + err := waf_service.WafTokenInfoServiceApp.ReloadAllValidTokensToCache() + if err != nil { + zlog.Info("加载token到cache错误", err.Error()) + } // 正式启动服务 if err := web.HttpServer.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) { errMsg := fmt.Sprintf("启动管理界面失败: %s", err.Error())