package service import ( "aps_crm/conf" "aps_crm/constvar" "aps_crm/model" "aps_crm/model/redisstore" "aps_crm/pkg/logx" "aps_crm/utils" ) type JwtService struct{} // JsonInBlacklist 拉黑jwt func (jwtService *JwtService) JsonInBlacklist(jwtList model.JwtBlacklist) (err error) { err = model.NewJwtBlacklistSearch(nil).Create(&jwtList) if err != nil { return } constvar.BlackCache.SetDefault(jwtList.Jwt, struct{}{}) return } // IsBlacklist 判断JWT是否在黑名单内部 func (jwtService *JwtService) IsBlacklist(jwt string) bool { _, ok := constvar.BlackCache.Get(jwt) return ok //_, err := model.NewJwtBlacklistSearch(nil).SetJWT(jwt).First() //isNotFound := errors.Is(err, gorm.ErrRecordNotFound) //return !isNotFound } // GetRedisJWT 从redis取jwt func (jwtService *JwtService) GetRedisJWT(userName string) (redisJWT string, err error) { return redisstore.NewJWT().Get(userName) } // SetRedisJWT jwt存入redis并设置过期时间 func (jwtService *JwtService) SetRedisJWT(jwt string, userName string) (err error) { // 此处过期时间等于jwt过期时间 dr, err := utils.ParseDuration(conf.Conf.JWT.ExpiresTime) if err != nil { return err } timer := dr return redisstore.NewJWT().Set(userName, jwt, timer) } func LoadAll() { data, err := model.NewJwtBlacklistSearch(nil).FindNotTotal() if err != nil { logx.Errorf("加载数据库jwt黑名单失败! err:%v", err) return } // jwt黑名单 加入 BlackCache 中 for _, v := range data { constvar.BlackCache.SetDefault(v.Jwt, struct{}{}) } }