package com.matrix.component.redis; import com.google.gson.Gson; import com.matrix.core.constance.SystemErrorCode; import com.matrix.core.exception.GlobleException; import com.matrix.core.tools.LogUtil; import com.matrix.core.tools.StringUtils; import com.matrix.core.tools.UUIDUtil; import com.matrix.core.tools.WebUtil; import com.matrix.system.hive.plugin.message.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; /** * 用户登录信息保存在redis上 * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年1月19日 */ @Component public class RedisUserLoginUtils { @Autowired RedisClient redisClient; private static final String TOKEN = "token"; @Value("${debug}") private String isDebug; /** * 判断用户是否已经登录过 * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年1月19日 * 会从http请求投中获取token进行验证 * @return * */ public boolean isUserLogin() { String token = getUserToken(); if (StringUtils.isNotBlank(token)) { String user = redisClient.getCachedValue(token); LogUtil.debug("redis 获取到token={},用户={}", token, user); return user != null; } else { LogUtil.debug("redis token未获取到token"); return false; } } public String getUserToken() { String token = WebUtil.getRequest().getHeader("token"); // debug模式可以从url参数中获取token if (StringUtils.isBlank(token) && "true".equals(isDebug)) { if (token == null) { token = WebUtil.getRequest().getParameter("token"); } } return token; } /** * 获取登录用户信息,如果 获取失败将会抛出异常 * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年1月19日 * @return */ public T getLoginUser(Class clazz) { String userToken = getUserToken(); LogUtil.debug("redisClient获取到用户token={}", userToken); if (userToken != null) { String json = redisClient.getCachedValue(userToken); LogUtil.info("从redis中获取的值为:"+json); if(StringUtils.isNotBlank(json)){ //重新设置key过期时间 redisClient.resetExpire(userToken); Gson g = new Gson(); return g.fromJson(json, clazz); }else{ throw new GlobleException(SystemErrorCode.REQUEST_INVALID); } } else { throw new GlobleException(SystemErrorCode.REQUEST_INVALID); } } /** * 在redis中保存用户信息,并且返回保存的token * * @author JIANGYOUYAO * @email 935090232@qq.com * @date 2018年1月19日 * @return 返回保存用户信息的token */ public String saveUserInfo(Object obj) { String token = UUIDUtil.getRandomID(); redisClient.saveValue(token, obj); LogUtil.debug("redis 保存用户返回token={}", token); return token; } /** * 用户退出 * * @author:吕敬瑛 * @date:2018年1月19日下午3:17:14 */ public void loginOut() { String toke = getUserToken(); redisClient.removeObject(toke); } }