feat:reboot app cache token lost

#250
This commit is contained in:
samwaf
2025-05-02 17:14:20 +08:00
parent f2e2cd21b3
commit 005b73e2db
2 changed files with 69 additions and 1 deletions
+64
View File
@@ -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已过期")
}
+5 -1
View File
@@ -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())