From 27e6bc3df3e39e0d0b147b155a89ad6837ea972b Mon Sep 17 00:00:00 2001 From: cjl <909710561@qq.com> Date: Mon, 06 Jan 2025 09:19:24 +0800 Subject: [PATCH] Merge branch 'cjl' into dev --- screen-common/src/main/java/com/moral/util/TokenUtils.java | 225 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 files changed, 183 insertions(+), 42 deletions(-) diff --git a/screen-common/src/main/java/com/moral/util/TokenUtils.java b/screen-common/src/main/java/com/moral/util/TokenUtils.java index 2fb6132..e51b7c0 100644 --- a/screen-common/src/main/java/com/moral/util/TokenUtils.java +++ b/screen-common/src/main/java/com/moral/util/TokenUtils.java @@ -1,14 +1,20 @@ package com.moral.util; +import com.moral.constant.ResponseCodeEnum; +import com.moral.exception.TokenException; + 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 org.springframework.util.ObjectUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; -import java.util.HashMap; -import java.util.Map; +import javax.servlet.http.HttpServletRequest; import java.util.concurrent.TimeUnit; /** @@ -21,7 +27,6 @@ @Component @Slf4j public class TokenUtils { - private static RedisTemplate redisTemplate; @Autowired @@ -31,75 +36,211 @@ } //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; + 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 - * @Param: [type, uid] type��� ���������������manage ���������������api + * @Description: ������token, ��������������������������������� + * @Param: [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<>(); + public static String getToken(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); - result.put("code", valid); - result.put("token",token); - }catch (Exception e){ - e.printStackTrace(); - log.error(e.getMessage()); - result.put("code",error); + //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()); } - return result; + } + 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��� + getRefreshTokenApp(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()); + } + } + + public static void getRefreshTokenApp(String token, Object userInfo) { + redisTemplate.opsForValue().set(token, userInfo); } /** * @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 Map<String, Object> checkToken( String token) { - Map<String, Object> result = new HashMap<>(); + public static boolean checkToken(String token) { try { String[] tokenArray = TokenEncryptUtils.decoded(token).split("/"); //������token������������ if (tokenArray.length != 2) { - result.put("code", error); - result.put("msg", "���������token"); - return result; + throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), + ResponseCodeEnum.TOKEN_INVALID.getMsg()); } //������token������������ - int tokenTime = Integer.parseInt(tokenArray[1]); - if ((System.currentTimeMillis() / 1000) - tokenTime > validity_time) { - result.put("code", timeout); - result.put("msg", "���������������������������������������"); - return result; + if (!redisTemplate.hasKey(token)) { + throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), + ResponseCodeEnum.TOKEN_INVALID.getMsg()); } - 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; + return false; } + return true; } - //������token������������������ - public static Map<String, Object> getUserInfoByToken(String token) { - Map<String, Object> userInfo = (Map<String, Object>) redisTemplate.opsForValue().get(token); + + /** + * @Description: ������token������������������ + * @Param: [token] + * @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) + throw new TokenException(ResponseCodeEnum.TOKEN_INVALID.getCode(), + ResponseCodeEnum.TOKEN_INVALID.getMsg()); return userInfo; } + + public static Object getUserInfo() { + String token = getCurrentToken(); + return getUserInfoByToken(token); + } + + /** + * @Description: ������token + * @Param: [uid, token] + * @return: void + * @Author: ��������� + * @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������ + * @Param: [token] + * @return: void + * @Author: ��������� + * @Date: 2021/3/11 + */ + public static void extendTokenTime(String token) { + redisTemplate.expire(token, validity_time, TimeUnit.SECONDS); + } } -- Gitblit v1.8.0