From c9711f1eba3e3ddb7c8c52f18844cd8afdce7a3e Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Fri, 12 May 2023 18:10:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20sa-token-temp-jwt=20?= =?UTF-8?q?=E6=A8=A1=E5=9D=97=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/dev33/satoken/temp/jwt/SaJwtUtil.java | 19 +++++++++++++------ .../dev33/satoken/temp/jwt/SaTempForJwt.java | 5 +++-- .../temp/jwt/error/SaTempJwtErrorCode.java | 8 ++++---- 3 files changed, 20 insertions(+), 12 deletions(-) diff --git a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaJwtUtil.java b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaJwtUtil.java index 93c17d5e..25157913 100644 --- a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaJwtUtil.java +++ b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaJwtUtil.java @@ -9,9 +9,10 @@ import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; /** - * jwt操作工具类 - * @author click33 + * jwt 相关操作工具类,封装一下 * + * @author click33 + * @since <= 1.34.0 */ public class SaJwtUtil { @@ -29,7 +30,8 @@ public class SaJwtUtil { public static final long NEVER_EXPIRE = SaTokenDao.NEVER_EXPIRE; /** - * 根据指定值创建 jwt-token + * 根据指定值创建 jwt-token + * * @param key 存储value使用的key * @param value 要保存的值 * @param timeout token有效期 (单位 秒) @@ -37,17 +39,21 @@ public class SaJwtUtil { * @return jwt-token */ public static String createToken(String key, Object value, long timeout, String keyt) { - // 计算eff有效期 + // 计算eff有效期: + // 如果 timeout 指定为 -1,那么 eff 也为 -1,代表永不过期 + // 如果 timeout 指定为一个具体的值,那么 eff 为 13 位时间戳,代表此数据到期的时间 long eff = timeout; if(timeout != NEVER_EXPIRE) { eff = timeout * 1000 + System.currentTimeMillis(); } + // 在这里你可以使用官方提供的claim方法构建载荷,也可以使用setPayload自定义载荷,但是两者不可一起使用 JwtBuilder builder = Jwts.builder() // .setHeaderParam("typ", "JWT") .claim(KEY_VALUE + key, value) .claim(KEY_EFF, eff) .signWith(SignatureAlgorithm.HS256, keyt.getBytes()); + // 生成jwt-token return builder.compact(); } @@ -63,6 +69,7 @@ public class SaJwtUtil { Claims claims = Jwts.parser() .setSigningKey(keyt.getBytes()) .parseClaimsJws(jwtToken).getBody(); + // 返回 return claims; } @@ -81,7 +88,7 @@ public class SaJwtUtil { // 验证是否超时 Long eff = claims.get(KEY_EFF, Long.class); if((eff == null || eff < System.currentTimeMillis()) && eff != NEVER_EXPIRE) { - throw new SaTokenException("Token已超时").setCode(SaTempJwtErrorCode.CODE_30303); + throw new SaTokenException("token 已超时,无法解析:" + jwtToken).setCode(SaTempJwtErrorCode.CODE_30303); } // 获取数据 @@ -98,7 +105,7 @@ public class SaJwtUtil { // 取出数据 Claims claims = parseToken(jwtToken, keyt); - // 如果给定的key不对 + // 如果给定的 key 不对 if(claims.get(KEY_VALUE + key) == null) { return SaTokenDao.NOT_VALUE_EXPIRE; } diff --git a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java index 0e8f6222..b57c0375 100644 --- a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java +++ b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/SaTempForJwt.java @@ -8,9 +8,10 @@ import cn.dev33.satoken.temp.jwt.error.SaTempJwtErrorCode; import cn.dev33.satoken.util.SaFoxUtil; /** - * Sa-Token 临时令牌验证模块接口 JWT实现类 - * @author click33 + * Sa-Token 临时令牌验证模块接口 JWT实现类,提供以 JWT 为逻辑内核的临时 token 验证功能 * + * @author click33 + * @since <= 1.34.0 */ public class SaTempForJwt implements SaTempInterface { diff --git a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/error/SaTempJwtErrorCode.java b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/error/SaTempJwtErrorCode.java index 128815a7..c099560e 100644 --- a/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/error/SaTempJwtErrorCode.java +++ b/sa-token-plugin/sa-token-temp-jwt/src/main/java/cn/dev33/satoken/temp/jwt/error/SaTempJwtErrorCode.java @@ -6,15 +6,15 @@ package cn.dev33.satoken.temp.jwt.error; * @author click33 * @since 2022-10-31 */ -public class SaTempJwtErrorCode { +public interface SaTempJwtErrorCode { /** jwt 模式没有提供秘钥 */ - public static final int CODE_30301 = 30301; + int CODE_30301 = 30301; /** jwt 模式不可以删除 Token */ - public static final int CODE_30302 = 30302; + int CODE_30302 = 30302; /** Token已超时 */ - public static final int CODE_30303 = 30303; + int CODE_30303 = 30303; }