package com.moral.util;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Qualifier;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Component;
|
|
|
import java.util.HashMap;
|
import java.util.Map;
|
import java.util.concurrent.TimeUnit;
|
|
/**
|
* @ClassName tokenUtils
|
* @Description token生成、解析工具类
|
* @Author 陈凯裕
|
* @Date 2021/3/10 11:35
|
* @Version TODO
|
**/
|
@Component
|
@Slf4j
|
public class TokenUtils {
|
|
private static RedisTemplate redisTemplate;
|
|
@Autowired
|
@Qualifier("tokenRedisTemplate")
|
public void setRedisTemplate(RedisTemplate redisTemplate) {
|
TokenUtils.redisTemplate = redisTemplate;
|
}
|
|
//token有效期 单位:秒
|
private static final int validity_time = 60*60*24*7;
|
//token非法,生成错误
|
public static final int error = -1;
|
//token过期
|
public static final int timeout = -2;
|
//token有效,生成成功
|
public static final int valid = 1;
|
|
/**
|
* @Description: 生成token
|
* @Param: [type, uid] type: 后台取值:manage 前台取值:api
|
* @return: java.lang.String
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
public static Map<String, Object> getToken(String uid, Map<String, Object> userInfo) {
|
Map<String, Object> result = new HashMap<>();
|
//生成加密token
|
try {
|
String token = TokenEncryptUtils.encoded(uid + "/" + System.currentTimeMillis() / 1000);
|
redisTemplate.opsForValue().set(token, userInfo);
|
redisTemplate.expire(token, validity_time, TimeUnit.SECONDS);
|
result.put("code", valid);
|
result.put("token",token);
|
}catch (Exception e){
|
e.printStackTrace();
|
log.error(e.getMessage());
|
result.put("code",error);
|
}
|
return result;
|
}
|
|
/**
|
* @Description: 校验token
|
* @Param: [type, token] type: 后台取值:manage 前台取值:api
|
* @return: java.util.Map<java.lang.String , java.lang.Object>
|
* @Author: 陈凯裕
|
* @Date: 2021/3/10
|
*/
|
public static Map<String, Object> checkToken( String token) {
|
Map<String, Object> result = new HashMap<>();
|
try {
|
String[] tokenArray = TokenEncryptUtils.decoded(token).split("/");
|
//校验token是否合法
|
if (tokenArray.length != 2) {
|
result.put("code", error);
|
result.put("msg", "无效的token");
|
return result;
|
}
|
//校验token是否过期
|
int tokenTime = Integer.parseInt(tokenArray[1]);
|
if ((System.currentTimeMillis() / 1000) - tokenTime > validity_time) {
|
result.put("code", timeout);
|
result.put("msg", "登陆身份已过期,请重新登陆");
|
return result;
|
}
|
result.put("code", valid);
|
return result;
|
} catch (Exception e) {
|
log.error("token工具类校验token异常" + e.getMessage());
|
result.put("code", error);
|
result.put("msg", "无效的token");
|
return result;
|
}
|
}
|
|
//通过token获取用户信息
|
public static Map<String, Object> getUserInfoByToken(String token) {
|
Map<String, Object> userInfo = (Map<String, Object>) redisTemplate.opsForValue().get(token);
|
return userInfo;
|
}
|
}
|