| | |
| | | import org.springframework.beans.factory.annotation.Qualifier; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | |
| | | } |
| | | |
| | | //token有效期 单位:秒 |
| | | private static final int validity_time = 60*30; |
| | | private static final int validity_time = 60 * 30; |
| | | |
| | | //判断user_token里有没有用户的token |
| | | public static boolean hHasKey(String uid) { |
| | | return redisTemplate.opsForHash().hasKey("user_token", uid); |
| | | } |
| | | |
| | | //根据用户id获取token |
| | | public static Object hget(String uid) { |
| | | return redisTemplate.opsForHash().get("user_token", uid); |
| | | } |
| | | |
| | | /** |
| | | * @Description: 生成token,并且将用户信息存入缓存 |
| | | * @Description: 生成token, 并且将用户信息存入缓存 |
| | | * @Param: [uid] type: 后台取值:manage 前台取值:api |
| | | * @return: java.lang.String |
| | | * @Author: 陈凯裕 |
| | |
| | | redisTemplate.delete(oldToken); |
| | | //新token写入到value中 |
| | | redisTemplate.opsForValue().set(token, userInfo); |
| | | redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); |
| | | //redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); |
| | | //新token写入到Hash中 |
| | | redisTemplate.opsForHash().put("user_token", uid, token); |
| | | return token; |
| | | } catch (Exception e) { |
| | | log.error("token生成异常:"+e.getMessage()); |
| | | log.error("token生成异常:" + e.getMessage()); |
| | | throw new TokenException(ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode(), |
| | | ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg()); |
| | | } |
| | | } |
| | | public static String getTokenApp(String uid, Object userInfo) { |
| | | //生成加密token |
| | | try { |
| | | //生成token |
| | | String token = TokenEncryptUtils.encoded(uid + "/" + System.currentTimeMillis() / 1000); |
| | | //查询旧的token |
| | | String oldToken = (String) redisTemplate.opsForHash().get("user_token", uid); |
| | | if (oldToken != null) |
| | | redisTemplate.delete(oldToken); |
| | | //新token写入到value中 |
| | | redisTemplate.opsForValue().set(token, userInfo); |
| | | //redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); |
| | | //新token写入到Hash中 |
| | | redisTemplate.opsForHash().put("user_token", uid, token); |
| | | return token; |
| | | } catch (Exception e) { |
| | | log.error("token生成异常:" + e.getMessage()); |
| | | throw new TokenException(ResponseCodeEnum.TOKEN_CREATE_ERROR.getCode(), |
| | | ResponseCodeEnum.TOKEN_CREATE_ERROR.getMsg()); |
| | | } |
| | |
| | | /** |
| | | * @Description: 校验token |
| | | * @Param: [type, token] type: 后台取值:manage 前台取值:api |
| | | * @return: java.util.Map<java.lang.String , java.lang.Object> |
| | | * @return: java.util.Map<java.lang.String , java.lang.Object> |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/3/10 |
| | | */ |
| | | public static void checkToken(String token) { |
| | | public static boolean checkToken(String token) { |
| | | try { |
| | | String[] tokenArray = TokenEncryptUtils.decoded(token).split("/"); |
| | | //校验token是否合法 |
| | |
| | | ResponseCodeEnum.TOKEN_INVALID.getMsg()); |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("token工具类校验token异常" + e.getMessage()); |
| | | throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), |
| | | ResponseCodeEnum.TOKEN_INVALID.getMsg()); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @Description: 通过token获取用户信息 前台使用 |
| | | * @Description: 通过token获取用户信息 |
| | | * @Param: [token] |
| | | * @return: java.util.Map<java.lang.String , java.lang.Object> |
| | | * @return: java.util.Map<java.lang.String , java.lang.Object> |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/3/11 |
| | | */ |
| | | public static Object getUserInfoByToken(String token) { |
| | | Object userInfo = redisTemplate.opsForValue().get(token); |
| | | if(userInfo==null) |
| | | if (userInfo == null) |
| | | throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), |
| | | ResponseCodeEnum.TOKEN_INVALID.getMsg()); |
| | | return userInfo; |
| | | } |
| | | |
| | | public static Object getUserInfo() { |
| | | String token = getCurrentToken(); |
| | | return getUserInfoByToken(token); |
| | | } |
| | | |
| | | /** |
| | |
| | | * @Date: 2021/3/11 |
| | | */ |
| | | public static void destoryToken(String uid, String token) { |
| | | if(ObjectUtils.isEmpty(uid)||ObjectUtils.isEmpty(token)) |
| | | return; |
| | | redisTemplate.delete(token); |
| | | redisTemplate.opsForHash().delete("user_token", uid); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @Description: 销毁token |
| | | * @Param: [token] |
| | | * @return: void |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/4/1 |
| | | */ |
| | | public static void destoryToken(String token) { |
| | | destoryToken(getUidByToken(token), token); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @Description: 销毁当前连接的token |
| | | * @Param: [] |
| | | * @return: void |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/5/21 |
| | | */ |
| | | public static void destoryToken() { |
| | | destoryToken(getCurrentToken()); |
| | | } |
| | | |
| | | public static void destoryToken(Integer id) { |
| | | String token = getTokenById(id); |
| | | destoryToken(String.valueOf(id),token); |
| | | } |
| | | |
| | | /** |
| | | * @Description: 根据id获取token |
| | | * @Param: [] |
| | | * @return: java.lang.String |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/5/21 |
| | | */ |
| | | public static String getTokenById(Integer id) { |
| | | return (String) getTokenById(id.toString()); |
| | | } |
| | | |
| | | public static String getTokenById(String id) { |
| | | return (String)redisTemplate.opsForHash().get("user_token", String.valueOf(id)); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @Description: 根据TOKEN获取Id |
| | | * @Param: [token] |
| | | * @return: void |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/4/1 |
| | | */ |
| | | public static String getUidByToken(String token) { |
| | | String[] string = TokenEncryptUtils.decoded(token).split("/"); |
| | | return string[0]; |
| | | } |
| | | |
| | | /** |
| | | * @Description: 获取当前请求的token |
| | | * @Param: [] |
| | | * @return: java.lang.String |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/5/21 |
| | | */ |
| | | public static String getCurrentToken() { |
| | | HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); |
| | | return request.getHeader("token"); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * @Description: token延长 |
| | |
| | | * @Author: 陈凯裕 |
| | | * @Date: 2021/3/11 |
| | | */ |
| | | public static void extendTokenTime(String token) { |
| | | public static void extendTokenTime(String token) { |
| | | redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); |
| | | } |
| | | } |