优化 sa-token-temp-jwt 模块注释

This commit is contained in:
click33
2023-05-12 18:10:09 +08:00
parent d06ef1052f
commit c9711f1eba
3 changed files with 20 additions and 12 deletions

View File

@@ -9,9 +9,10 @@ import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.SignatureAlgorithm;
/** /**
* jwt操作工具类 * jwt 相关操作工具类,封装一下
* @author click33
* *
* @author click33
* @since <= 1.34.0
*/ */
public class SaJwtUtil { public class SaJwtUtil {
@@ -30,6 +31,7 @@ public class SaJwtUtil {
/** /**
* 根据指定值创建 jwt-token * 根据指定值创建 jwt-token
*
* @param key 存储value使用的key * @param key 存储value使用的key
* @param value 要保存的值 * @param value 要保存的值
* @param timeout token有效期 (单位 秒) * @param timeout token有效期 (单位 秒)
@@ -37,17 +39,21 @@ public class SaJwtUtil {
* @return jwt-token * @return jwt-token
*/ */
public static String createToken(String key, Object value, long timeout, String keyt) { public static String createToken(String key, Object value, long timeout, String keyt) {
// 计算eff有效期 // 计算eff有效期
// 如果 timeout 指定为 -1那么 eff 也为 -1代表永不过期
// 如果 timeout 指定为一个具体的值,那么 eff 为 13 位时间戳,代表此数据到期的时间
long eff = timeout; long eff = timeout;
if(timeout != NEVER_EXPIRE) { if(timeout != NEVER_EXPIRE) {
eff = timeout * 1000 + System.currentTimeMillis(); eff = timeout * 1000 + System.currentTimeMillis();
} }
// 在这里你可以使用官方提供的claim方法构建载荷也可以使用setPayload自定义载荷但是两者不可一起使用 // 在这里你可以使用官方提供的claim方法构建载荷也可以使用setPayload自定义载荷但是两者不可一起使用
JwtBuilder builder = Jwts.builder() JwtBuilder builder = Jwts.builder()
// .setHeaderParam("typ", "JWT") // .setHeaderParam("typ", "JWT")
.claim(KEY_VALUE + key, value) .claim(KEY_VALUE + key, value)
.claim(KEY_EFF, eff) .claim(KEY_EFF, eff)
.signWith(SignatureAlgorithm.HS256, keyt.getBytes()); .signWith(SignatureAlgorithm.HS256, keyt.getBytes());
// 生成jwt-token // 生成jwt-token
return builder.compact(); return builder.compact();
} }
@@ -63,6 +69,7 @@ public class SaJwtUtil {
Claims claims = Jwts.parser() Claims claims = Jwts.parser()
.setSigningKey(keyt.getBytes()) .setSigningKey(keyt.getBytes())
.parseClaimsJws(jwtToken).getBody(); .parseClaimsJws(jwtToken).getBody();
// 返回 // 返回
return claims; return claims;
} }
@@ -81,7 +88,7 @@ public class SaJwtUtil {
// 验证是否超时 // 验证是否超时
Long eff = claims.get(KEY_EFF, Long.class); Long eff = claims.get(KEY_EFF, Long.class);
if((eff == null || eff < System.currentTimeMillis()) && eff != NEVER_EXPIRE) { 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); Claims claims = parseToken(jwtToken, keyt);
// 如果给定的key不对 // 如果给定的 key 不对
if(claims.get(KEY_VALUE + key) == null) { if(claims.get(KEY_VALUE + key) == null) {
return SaTokenDao.NOT_VALUE_EXPIRE; return SaTokenDao.NOT_VALUE_EXPIRE;
} }

View File

@@ -8,9 +8,10 @@ import cn.dev33.satoken.temp.jwt.error.SaTempJwtErrorCode;
import cn.dev33.satoken.util.SaFoxUtil; import cn.dev33.satoken.util.SaFoxUtil;
/** /**
* Sa-Token 临时令牌验证模块接口 JWT实现类 * Sa-Token 临时令牌验证模块接口 JWT实现类,提供以 JWT 为逻辑内核的临时 token 验证功能
* @author click33
* *
* @author click33
* @since <= 1.34.0
*/ */
public class SaTempForJwt implements SaTempInterface { public class SaTempForJwt implements SaTempInterface {

View File

@@ -6,15 +6,15 @@ package cn.dev33.satoken.temp.jwt.error;
* @author click33 * @author click33
* @since 2022-10-31 * @since 2022-10-31
*/ */
public class SaTempJwtErrorCode { public interface SaTempJwtErrorCode {
/** jwt 模式没有提供秘钥 */ /** jwt 模式没有提供秘钥 */
public static final int CODE_30301 = 30301; int CODE_30301 = 30301;
/** jwt 模式不可以删除 Token */ /** jwt 模式不可以删除 Token */
public static final int CODE_30302 = 30302; int CODE_30302 = 30302;
/** Token已超时 */ /** Token已超时 */
public static final int CODE_30303 = 30303; int CODE_30303 = 30303;
} }