重构异常状态码机制

This commit is contained in:
click33
2022-10-31 02:00:38 +08:00
parent f21b6d8b07
commit d2665036a2
56 changed files with 832 additions and 229 deletions

View File

@@ -4,8 +4,8 @@ import java.util.Map;
import java.util.Objects;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.jwt.error.SaJwtErrorCode;
import cn.dev33.satoken.jwt.exception.SaJwtException;
import cn.dev33.satoken.jwt.exception.SaJwtExceptionCode;
import cn.dev33.satoken.util.SaFoxUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.jwt.JWT;
@@ -146,19 +146,19 @@ public class SaJwtTemplate {
try {
jwt = JWT.of(token);
} catch (JWTException e) {
throw new SaJwtException("jwt 解析失败:" + token, e).setCode(SaJwtExceptionCode.CODE_40101);
throw new SaJwtException("jwt 解析失败:" + token, e).setCode(SaJwtErrorCode.CODE_30201);
}
JSONObject payloads = jwt.getPayloads();
// 校验 Token 签名
boolean verify = jwt.setKey(keyt.getBytes()).verify();
if(verify == false) {
throw new SaJwtException("jwt 签名无效:" + token).setCode(SaJwtExceptionCode.CODE_40102);
throw new SaJwtException("jwt 签名无效:" + token).setCode(SaJwtErrorCode.CODE_30202);
};
// 校验 loginType
if(Objects.equals(loginType, payloads.getStr(LOGIN_TYPE)) == false) {
throw new SaJwtException("jwt loginType 无效:" + token).setCode(SaJwtExceptionCode.CODE_40103);
throw new SaJwtException("jwt loginType 无效:" + token).setCode(SaJwtErrorCode.CODE_30203);
}
// 校验 Token 有效期
@@ -166,7 +166,7 @@ public class SaJwtTemplate {
Long effTime = payloads.getLong(EFF, 0L);
if(effTime != NEVER_EXPIRE) {
if(effTime == null || effTime < System.currentTimeMillis()) {
throw new SaJwtException("jwt 已过期:" + token).setCode(SaJwtExceptionCode.CODE_40104);
throw new SaJwtException("jwt 已过期:" + token).setCode(SaJwtErrorCode.CODE_30204);
}
}
}

View File

@@ -6,7 +6,7 @@ import java.util.Map;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.exception.ApiDisabledException;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.jwt.error.SaJwtErrorCode;
import cn.dev33.satoken.jwt.exception.SaJwtException;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpLogic;
@@ -40,7 +40,7 @@ public class StpLogicJwtForMixin extends StpLogic {
*/
public String jwtSecretKey() {
String keyt = getConfig().getJwtSecretKey();
SaTokenException.throwByNull(keyt, "请配置jwt秘钥");
SaJwtException.throwByNull(keyt, "请配置jwt秘钥", SaJwtErrorCode.CODE_30205);
return keyt;
}

View File

@@ -2,7 +2,8 @@ package cn.dev33.satoken.jwt;
import java.util.Map;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.jwt.error.SaJwtErrorCode;
import cn.dev33.satoken.jwt.exception.SaJwtException;
import cn.dev33.satoken.stp.StpLogic;
import cn.dev33.satoken.stp.StpUtil;
@@ -34,7 +35,7 @@ public class StpLogicJwtForSimple extends StpLogic {
*/
public String jwtSecretKey() {
String keyt = getConfig().getJwtSecretKey();
SaTokenException.throwByNull(keyt, "请配置jwt秘钥");
SaJwtException.throwByNull(keyt, "请配置jwt秘钥", SaJwtErrorCode.CODE_30205);
return keyt;
}

View File

@@ -5,7 +5,7 @@ import java.util.Map;
import cn.dev33.satoken.context.SaHolder;
import cn.dev33.satoken.dao.SaTokenDao;
import cn.dev33.satoken.exception.ApiDisabledException;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.jwt.error.SaJwtErrorCode;
import cn.dev33.satoken.jwt.exception.SaJwtException;
import cn.dev33.satoken.listener.SaTokenEventCenter;
import cn.dev33.satoken.stp.SaLoginModel;
@@ -42,7 +42,7 @@ public class StpLogicJwtForStateless extends StpLogic {
*/
public String jwtSecretKey() {
String keyt = getConfig().getJwtSecretKey();
SaTokenException.throwByNull(keyt, "请配置jwt秘钥");
SaJwtException.throwByNull(keyt, "请配置jwt秘钥", SaJwtErrorCode.CODE_30205);
return keyt;
}
@@ -90,7 +90,7 @@ public class StpLogicJwtForStateless extends StpLogic {
*/
@Override
public String createLoginSession(Object id, SaLoginModel loginModel) {
SaTokenException.throwByNull(id, "账号id不能为空");
SaJwtException.throwByNull(id, "账号id不能为空", SaJwtErrorCode.CODE_30206);
// ------ 1、初始化 loginModel
loginModel.build(getConfig());

View File

@@ -0,0 +1,29 @@
package cn.dev33.satoken.jwt.error;
/**
* 定义 sa-token-jwt 所有异常细分状态码
*
* @author kong
* @since 2022-10-31
*/
public class SaJwtErrorCode {
/** 对 jwt 字符串解析失败 */
public static final int CODE_30201 = 30201;
/** 此 jwt 的签名无效 */
public static final int CODE_30202 = 30202;
/** 此 jwt 的 loginType 字段不符合预期 */
public static final int CODE_30203 = 30203;
/** 此 jwt 已超时 */
public static final int CODE_30204 = 30204;
/** 没有配置jwt秘钥 */
public static final int CODE_30205 = 30205;
/** 登录时提供的账号id为空 */
public static final int CODE_30206 = 30206;
}

View File

@@ -1,12 +1,14 @@
package cn.dev33.satoken.jwt.exception;
import cn.dev33.satoken.exception.SaTokenException;
import cn.dev33.satoken.util.SaFoxUtil;
/**
* 一个异常:代表 jwt 解析错误
* 一个异常:代表 jwt 相关错误
*
* @author kong
* @since 2022-10-31
*/
public class SaJwtException extends SaTokenException {
@@ -52,5 +54,17 @@ public class SaJwtException extends SaTokenException {
throw new SaJwtException(message);
}
}
/**
* 如果value==null或者isEmpty则抛出message异常
* @param value 值
* @param message 异常信息
* @param code 异常细分状态码
*/
public static void throwByNull(Object value, String message, int code) {
if(SaFoxUtil.isEmpty(value)) {
throw new SaJwtException(message).setCode(code);
}
}
}

View File

@@ -1,23 +0,0 @@
package cn.dev33.satoken.jwt.exception;
/**
* 定义所有 JWT 异常细分状态码
*
* @author kong
* @since: 2022-5-1
*/
public class SaJwtExceptionCode {
/** 对 jwt 字符串解析失败 */
public static final int CODE_40101 = 40101;
/** 此 jwt 的签名无效 */
public static final int CODE_40102 = 40102;
/** 此 jwt 的 loginType 字段不符合预期 */
public static final int CODE_40103 = 40103;
/** 此 jwt 已超时 */
public static final int CODE_40104 = 40104;
}