MrShi
4 天以前 82f707ece09a906007f3d760b6bb025896e3bba6
server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -18,10 +18,7 @@
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Component
@@ -32,7 +29,10 @@
    public static final String MEMBER_ID = "MEMBER_ID";
    public static final String MEMBER_INFO = "MEMBER_INFO";
    public static final String SHOP_ID = "SHOP_ID";
    public static final String DRIVER_ID = "DRIVER_ID";
    @Resource
    private RedisTemplate<String,Object> redisTemplate;
@@ -40,6 +40,8 @@
    @Resource
    private JwtProperties jwtProperties;
    //redis过期时间
    private static final Integer redisExpire = 365;
    /**
     * 生成token令牌
     *
@@ -64,6 +66,31 @@
           e.printStackTrace();
        }
        return null;
    }
    /**
     * 生成token信息(同一用户仅保留一个有效token)
     * @param userId
     * @param userType 用户类型 0=会员;1=司机;2=店铺
     * @param userInfo
     * @param redisTemplate
     * @return
     */
    public static String generateTokenForRedis(Integer userId, Integer userType, String userInfo, RedisTemplate<String,Object> redisTemplate) {
        // 删除该用户之前登录的token
        String userTokenMappingKey = Constants.REDIS_TOKEN_KEY + "user_" + userType + "_" + userId;
        String oldToken = (String) redisTemplate.opsForValue().get(userTokenMappingKey);
        if (StringUtils.isNotBlank(oldToken)) {
            redisTemplate.delete(Constants.REDIS_TOKEN_KEY + oldToken);
        }
        // 生成新token
        String tokenKey = userType +""+ UUID.randomUUID() + "_" + userId;
        redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY + tokenKey, userInfo, redisExpire, TimeUnit.DAYS);
        // 记录用户与token的映射关系
        redisTemplate.opsForValue().set(userTokenMappingKey, tokenKey, redisExpire, TimeUnit.DAYS);
        return tokenKey;
    }
@@ -92,7 +119,7 @@
     * @param token 原令牌
     * @return 新令牌
     */
    public void logoutForH5(String token) {
    public void logout(String token) {
        try {
            //删除老的token
            redisTemplate.delete(Constants.REDIS_TOKEN_KEY+token);