mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-09-19 10:08:07 +08:00
重构异常状态码机制
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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;
|
||||
}
|
||||
|
||||
|
@@ -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());
|
||||
|
@@ -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;
|
||||
|
||||
}
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -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;
|
||||
|
||||
}
|
Reference in New Issue
Block a user