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{}{})
|
}
|
}
|