From d729d924aff31c769b90adc99d998d38cdf50ec0 Mon Sep 17 00:00:00 2001
From: liyanqi <15181887205@163.com>
Date: 星期五, 09 九月 2022 22:06:33 +0800
Subject: [PATCH] 修复一些问题

---
 ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java |   54 ++++++++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 44 insertions(+), 10 deletions(-)

diff --git a/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java b/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
index 45f2028..1ebaabf 100644
--- a/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
+++ b/ycl-common/src/main/java/com/ycl/utils/JwtTokenUtil.java
@@ -2,6 +2,11 @@
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.ycl.entity.auth.AuthInfo;
+import com.ycl.enums.common.ResultCode;
+import com.ycl.exception.ApiException;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
@@ -27,7 +32,7 @@
  */
 public class JwtTokenUtil {
     private static final Logger LOGGER = LoggerFactory.getLogger(JwtTokenUtil.class);
-    private static final String CLAIM_KEY_USERNAME = "sub";
+    private static final String CLAIM_KEY_INFO = "sub";
     private static final String CLAIM_KEY_CREATED = "created";
     @Value("${jwt.secret}")
     private String secret;
@@ -116,7 +121,7 @@
      */
     public String generateToken(UserDetails userDetails) {
         Map<String, Object> claims = new HashMap<>();
-        claims.put(CLAIM_KEY_USERNAME, userDetails.getUsername());
+        claims.put(CLAIM_KEY_INFO, userDetails.getUsername());
         claims.put(CLAIM_KEY_CREATED, new Date());
         return generateToken(claims);
     }
@@ -127,26 +132,26 @@
      * @param oldToken 甯okenHead鐨則oken
      */
     public String refreshHeadToken(String oldToken) {
-        if(StrUtil.isEmpty(oldToken)){
+        if (StrUtil.isEmpty(oldToken)) {
             return null;
         }
         String token = oldToken.substring(tokenHead.length());
-        if(StrUtil.isEmpty(token)){
+        if (StrUtil.isEmpty(token)) {
             return null;
         }
         //token鏍¢獙涓嶉�氳繃
         Claims claims = getClaimsFromToken(token);
-        if(claims==null){
+        if (claims == null) {
             return null;
         }
         //濡傛灉token宸茬粡杩囨湡锛屼笉鏀寔鍒锋柊
-        if(isTokenExpired(token)){
+        if (isTokenExpired(token)) {
             return null;
         }
         //濡傛灉token鍦�30鍒嗛挓涔嬪唴鍒氬埛鏂拌繃锛岃繑鍥炲師token
-        if(tokenRefreshJustBefore(token,30*60)){
+        if (tokenRefreshJustBefore(token, 30 * 60)) {
             return token;
-        }else{
+        } else {
             claims.put(CLAIM_KEY_CREATED, new Date());
             return generateToken(claims);
         }
@@ -154,17 +159,46 @@
 
     /**
      * 鍒ゆ柇token鍦ㄦ寚瀹氭椂闂村唴鏄惁鍒氬垰鍒锋柊杩�
+     *
      * @param token 鍘焧oken
-     * @param time 鎸囧畾鏃堕棿锛堢锛�
+     * @param time  鎸囧畾鏃堕棿锛堢锛�
      */
     private boolean tokenRefreshJustBefore(String token, int time) {
         Claims claims = getClaimsFromToken(token);
         Date created = claims.get(CLAIM_KEY_CREATED, Date.class);
         Date refreshDate = new Date();
         //鍒锋柊鏃堕棿鍦ㄥ垱寤烘椂闂寸殑鎸囧畾鏃堕棿鍐�
-        if(refreshDate.after(created)&&refreshDate.before(DateUtil.offsetSecond(created,time))){
+        if (refreshDate.after(created) && refreshDate.before(DateUtil.offsetSecond(created, time))) {
             return true;
         }
         return false;
     }
+
+    public AuthInfo parseToken(String token) {
+        AuthInfo authInfo = null;
+        try {
+            if (isTokenExpired(token)) {
+                throw new ApiException(ResultCode.NOT_LOGGED);
+            }
+            Claims claims = getClaimsFromToken(token);
+            String subject = claims.getSubject();
+            authInfo = JSON.parseObject(subject, AuthInfo.class);
+        } catch (Exception e) {
+            throw new ApiException(e.getMessage());
+        }
+        return authInfo;
+    }
+
+    /**
+     * 鏍规嵁鐢ㄦ埛id,鐢ㄦ埛鍚嶇敓鎴恡oken
+     */
+    public String generateToken(long userId, String username) {
+        Map<String, Object> claims = new HashMap<>();
+        AuthInfo authInfo = new AuthInfo();
+        authInfo.setUserId(userId);
+        authInfo.setUsername(username);
+        claims.put(CLAIM_KEY_INFO, JSONObject.toJSONString(authInfo));
+        claims.put(CLAIM_KEY_CREATED, new Date());
+        return generateToken(claims);
+    }
 }

--
Gitblit v1.8.0