From 983bdb5b89932b38d08a11ad1eed6ea89d1597e1 Mon Sep 17 00:00:00 2001
From: kongzy <kongzy>
Date: 星期一, 29 一月 2024 10:07:31 +0800
Subject: [PATCH] 更新

---
 assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 54 insertions(+), 2 deletions(-)

diff --git a/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java b/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java
index cd30016..0447a9a 100644
--- a/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java
+++ b/assess-common/src/main/java/com/gkhy/assess/common/utils/JwtTokenUtil.java
@@ -1,18 +1,25 @@
 package com.gkhy.assess.common.utils;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.crypto.digest.DigestUtil;
 import com.auth0.jwt.JWT;
 import com.auth0.jwt.JWTVerifier;
 import com.auth0.jwt.algorithms.Algorithm;
 import com.auth0.jwt.exceptions.JWTDecodeException;
 import com.auth0.jwt.interfaces.DecodedJWT;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.gkhy.assess.common.api.CommonResult;
 import com.gkhy.assess.common.exception.ApiException;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.shiro.crypto.hash.Md5Hash;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.OutputStream;
 import java.util.Date;
 
 /**
@@ -37,8 +44,13 @@
 
     public static String tokenHead="";
 
-    /**Token有效期为7天(Token在reids中缓存时间为两倍)*/
-    public static final long EXPIRATION=(7 * 12) * 60 * 60 * 1000;  //JWT的超期限时间(60*60*24*7)
+    /**Token有效期为1天(Token在reids中缓存时间为两倍)  单位ms*/
+    public static final long EXPIRATION=(1 * 24) * 60 * 60 * 1000;  //JWT的超期限时间(60*60*24*1)
+
+    /**
+     * token有效期还有30分钟,刷新token  单位ms
+     */
+    public static final long NEED_UPDATE_TIME= 30 * 60 * 1000;
 
     /**
      * 校验token是否正确
@@ -56,6 +68,20 @@
         }catch (Exception e){
             return false;
         }
+    }
+
+
+    public static boolean isNeedUpdate(String token,String username,String secret){
+        Date expertsAt =null;
+        try {
+            Algorithm algorithm = Algorithm.HMAC256(secret);
+            JWTVerifier verifier = JWT.require(algorithm).withClaim("username", username).build();
+            expertsAt = verifier.verify(token).getExpiresAt();
+        }catch (Exception e){
+            throw new ApiException("token非法无效");
+        }
+        //如果剩余过期时间少于过期时常的一半时 需要更新
+        return (expertsAt.getTime()-System.currentTimeMillis()) < NEED_UPDATE_TIME;
     }
 
     /**
@@ -127,4 +153,30 @@
     }
 
 
+    /**
+     *
+     * @param response
+     * @param code
+     * @param errorMsg
+     */
+    public static void responseError(ServletResponse response, String errorMsg) {
+        HttpServletResponse httpServletResponse = (HttpServletResponse) response;
+        // issues/I4YH95浏览器显示乱码问题
+        httpServletResponse.setHeader("Content-type", "text/html;charset=UTF-8");
+        CommonResult jsonResult = CommonResult.failed(errorMsg);
+        OutputStream os = null;
+        try {
+            os = httpServletResponse.getOutputStream();
+            httpServletResponse.setCharacterEncoding("UTF-8");
+         //   httpServletResponse.setStatus(code);
+            os.write(new ObjectMapper().writeValueAsString(jsonResult).getBytes("UTF-8"));
+            os.flush();
+            os.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+
+
 }

--
Gitblit v1.9.2