From 56832986f64178bb47d71e485be61f62f15b8aaa Mon Sep 17 00:00:00 2001 From: click33 <2393584716@qq.com> Date: Fri, 12 May 2023 18:27:59 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20sa-token-jwt=20=E6=A8=A1?= =?UTF-8?q?=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/jwt/SaJwtTemplate.java | 23 +++++++++++++------ .../java/cn/dev33/satoken/jwt/SaJwtUtil.java | 5 ++-- .../satoken/jwt/StpLogicJwtForMixin.java | 5 ++-- .../satoken/jwt/StpLogicJwtForSimple.java | 5 ++-- .../satoken/jwt/StpLogicJwtForStateless.java | 5 ++-- .../satoken/jwt/error/SaJwtErrorCode.java | 14 +++++------ .../satoken/jwt/exception/SaJwtException.java | 2 +- 7 files changed, 36 insertions(+), 23 deletions(-) diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java index 1243f5d6..b8c71814 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtTemplate.java @@ -12,9 +12,10 @@ import cn.hutool.jwt.JWT; import cn.hutool.jwt.JWTException; /** - * jwt 操作模板方法封装 - * @author click33 + * jwt 操作模板方法封装 * + * @author click33 + * @since <= 1.34.0 */ public class SaJwtTemplate { @@ -57,6 +58,7 @@ public class SaJwtTemplate { /** * 创建 jwt (简单方式) + * * @param loginType 登录类型 * @param loginId 账号id * @param extraData 扩展数据 @@ -69,6 +71,7 @@ public class SaJwtTemplate { JWT jwt = JWT.create() .setPayload(LOGIN_TYPE, loginType) .setPayload(LOGIN_ID, loginId) + // 塞入一个随机字符串,防止同账号下每次生成的 token 都一样的 .setPayload(RN_STR, SaFoxUtil.getRandomString(32)) .addPayloads(extraData) ; @@ -79,6 +82,7 @@ public class SaJwtTemplate { /** * 创建 jwt (全参数方式) + * * @param loginType 账号类型 * @param loginId 账号id * @param device 设备类型 @@ -90,7 +94,9 @@ public class SaJwtTemplate { public String createToken(String loginType, Object loginId, String device, long timeout, Map extraData, String keyt) { - // 计算有效期 + // 计算 eff 有效期: + // 如果 timeout 指定为 -1,那么 eff 也为 -1,代表永不过期 + // 如果 timeout 指定为一个具体的值,那么 eff 为 13 位时间戳,代表此 token 到期的时间 long effTime = timeout; if(timeout != NEVER_EXPIRE) { effTime = timeout * 1000 + System.currentTimeMillis(); @@ -102,6 +108,7 @@ public class SaJwtTemplate { .setPayload(LOGIN_ID, loginId) .setPayload(DEVICE, device) .setPayload(EFF, effTime) + // 塞入一个随机字符串,防止同账号同一毫秒下每次生成的 token 都一样的 .setPayload(RN_STR, SaFoxUtil.getRandomString(32)) .addPayloads(extraData); @@ -110,7 +117,8 @@ public class SaJwtTemplate { } /** - * 为 JWT 对象和 keyt 秘钥,生成 token 字符串 + * 为 JWT 对象和 keyt 秘钥,生成 token 字符串 + * * @param jwt JWT构建对象 * @param keyt 秘钥 * @return 根据 JWT 对象和 keyt 秘钥,生成的 token 字符串 @@ -122,7 +130,8 @@ public class SaJwtTemplate { // ------ 解析 /** - * jwt 解析 + * jwt 解析 + * * @param token Jwt-Token值 * @param loginType 登录类型 * @param keyt 秘钥 @@ -132,7 +141,7 @@ public class SaJwtTemplate { public JWT parseToken(String token, String loginType, String keyt, boolean isCheckTimeout) { // 秘钥不可以为空 - if(keyt == null) { + if(SaFoxUtil.isEmpty(keyt)) { throw new SaJwtException("请配置 jwt 秘钥"); } @@ -142,7 +151,7 @@ public class SaJwtTemplate { } // 解析 - JWT jwt = null; + JWT jwt; try { jwt = JWT.of(token); } catch (JWTException e) { diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java index b6833f49..b3c124e2 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/SaJwtUtil.java @@ -6,9 +6,10 @@ import cn.hutool.json.JSONObject; import cn.hutool.jwt.JWT; /** - * jwt 操作工具类封装 - * @author click33 + * jwt 操作工具类封装 * + * @author click33 + * @since <= 1.34.0 */ public class SaJwtUtil { diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java index 9bbcf349..4d571168 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForMixin.java @@ -13,9 +13,10 @@ import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpUtil; /** - * Sa-Token 整合 jwt -- Mixin 混入模式 - * @author click33 + * Sa-Token 整合 jwt -- Mixin 混入模式 * + * @author click33 + * @since <= 1.34.0 */ public class StpLogicJwtForMixin extends StpLogic { diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java index 322d25b9..37466cff 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForSimple.java @@ -8,9 +8,10 @@ import cn.dev33.satoken.stp.StpLogic; import cn.dev33.satoken.stp.StpUtil; /** - * Sa-Token 整合 jwt -- Simple 简单模式 - * @author click33 + * Sa-Token 整合 jwt -- Simple 简单模式 * + * @author click33 + * @since <= 1.34.0 */ public class StpLogicJwtForSimple extends StpLogic { diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java index f6c72a37..f17baa1c 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/StpLogicJwtForStateless.java @@ -15,9 +15,10 @@ import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.util.SaFoxUtil; /** - * Sa-Token 整合 jwt -- Stateless 无状态模式 + * Sa-Token 整合 jwt -- Stateless 无状态模式 + * * @author click33 - * + * @since <= 1.34.0 */ public class StpLogicJwtForStateless extends StpLogic { diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/error/SaJwtErrorCode.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/error/SaJwtErrorCode.java index 606c4ee8..73a5fc4d 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/error/SaJwtErrorCode.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/error/SaJwtErrorCode.java @@ -6,24 +6,24 @@ package cn.dev33.satoken.jwt.error; * @author click33 * @since 2022-10-31 */ -public class SaJwtErrorCode { +public interface SaJwtErrorCode { /** 对 jwt 字符串解析失败 */ - public static final int CODE_30201 = 30201; + int CODE_30201 = 30201; /** 此 jwt 的签名无效 */ - public static final int CODE_30202 = 30202; + int CODE_30202 = 30202; /** 此 jwt 的 loginType 字段不符合预期 */ - public static final int CODE_30203 = 30203; + int CODE_30203 = 30203; /** 此 jwt 已超时 */ - public static final int CODE_30204 = 30204; + int CODE_30204 = 30204; /** 没有配置jwt秘钥 */ - public static final int CODE_30205 = 30205; + int CODE_30205 = 30205; /** 登录时提供的账号id为空 */ - public static final int CODE_30206 = 30206; + int CODE_30206 = 30206; } diff --git a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/exception/SaJwtException.java b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/exception/SaJwtException.java index 901924c2..d55462c3 100644 --- a/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/exception/SaJwtException.java +++ b/sa-token-plugin/sa-token-jwt/src/main/java/cn/dev33/satoken/jwt/exception/SaJwtException.java @@ -5,7 +5,7 @@ import cn.dev33.satoken.util.SaFoxUtil; /** - * 一个异常:代表 jwt 相关错误 + * 一个异常:代表 jwt 模块相关错误 * * @author click33 * @since 2022-10-31