package com.sandu.common.security.token;
|
|
import cn.hutool.core.util.IdUtil;
|
import com.sandu.common.redis.RedisService;
|
import com.sandu.common.redis.UserModel;
|
import com.sandu.common.security.LoginUserInfo;
|
import lombok.AllArgsConstructor;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.stereotype.Component;
|
|
/**
|
* @author chenjiantian
|
* @date 2022/1/8 16:39
|
*/
|
@AllArgsConstructor
|
@Component
|
@ConditionalOnProperty(prefix = "sandu.jwt", name = "cache-online", havingValue = "true")
|
public class RedisTokenProvider implements TokenProvider {
|
|
private final RedisService redisService;
|
|
@Override
|
public String createToken(LoginUserInfo loginUserInfo) {
|
if (loginUserInfo.getUserId() == null) {
|
throw new IllegalArgumentException("用户id不能为空");
|
}
|
String token = IdUtil.simpleUUID();
|
loginUserInfo.setToken(token);
|
loginUserInfo.setCreateTimestamp(System.currentTimeMillis());
|
redisService.set(UserModel.USER_TOKEN.key(token), loginUserInfo, UserModel.USER_TOKEN.expireSeconds());
|
redisService.set(UserModel.USER_INFO.key(loginUserInfo.getUserId().toString() + loginUserInfo.getAdministratorType()), loginUserInfo);
|
return token;
|
}
|
|
@Override
|
public LoginUserInfo validateToken(String token) {
|
if (token == null) {
|
return null;
|
}
|
LoginUserInfo loginUserInfo = (LoginUserInfo) redisService.get(UserModel.USER_TOKEN.key(token));
|
if (loginUserInfo == null) {
|
return null;
|
}
|
LoginUserInfo userInfo
|
= (LoginUserInfo) redisService.get(UserModel.USER_INFO.key(loginUserInfo.getUserId().toString() + loginUserInfo.getAdministratorType().toString()));
|
if (userInfo != null) {
|
if (redisService.getExpire(token) < UserModel.USER_TOKEN.expireSeconds()) {
|
redisService.expire(token, UserModel.USER_TOKEN.expireSeconds());
|
}
|
}
|
return userInfo;
|
}
|
|
}
|