mirror of
https://gitee.com/dromara/sa-token.git
synced 2024-11-29 18:37:49 +08:00
7.9 KiB
7.9 KiB
异常细分状态码
获取异常细分状态码
Sa-Token 中的基础异常类是 SaTokenException
,在此基础上,又针对一些特定场景划分出诸如 NotLoginException
、NotPermissionException
等。
但是框架中异常抛出点远远多于异常种类的划分,比如在 SSO 插件中,[ redirect 重定向地址无效 ] 和 [ ticket 参数值无效 ] 都会导致 SSO 授权的失败,
但是它们抛出的异常都是 SaSsoException
,如果你需要对这两种异常情形做出不同的处理,仅仅判断异常的 ClassType 显然不够。
为了解决上述需求,Sa-Token 对每个异常抛出点都会指定一个特定的 code 值,就像这样:
if(SaFoxUtil.isUrl(url) == false) {
throw new SaSsoException("无效redirect:" + url).setCode(SaSsoErrorCode.CODE_30001);
}
就像是打上一个特定的标记,不同异常情形标记的 code 码值也会不同,这就为你精细化异常处理提供了前提。
要在捕获异常时获取这个 code 码也非常简单:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(SaTokenException.class)
public SaResult handlerSaTokenException(SaTokenException e) {
// 根据不同异常细分状态码返回不同的提示
if(e.getCode() == 30001) {
return SaResult.error("redirect 重定向 url 是一个无效地址");
}
if(e.getCode() == 30002) {
return SaResult.error("redirect 重定向 url 不在 allowUrl 允许的范围内");
}
if(e.getCode() == 30004) {
return SaResult.error("提供的 ticket 是无效的");
}
// 更多 code 码判断 ...
// 默认的提示
return SaResult.error("服务器繁忙,请稍后重试...");
}
}
SaToken 中的所有异常都是继承于 SaTokenException
的,也就是说,所有异常你都可以通过 e.getCode()
的方式获取对应的异常细分状态码。
异常细分状态码-参照表
sa-token-code 核心包
code码值 | 含义 |
---|---|
-1 | 代表这个异常在抛出时未指定异常细分状态码 |
10001 | 未能获取有效的上下文处理器 |
10002 | 未能获取有效的上下文 |
10003 | JSON 转换器未实现 |
10011 | 未能从全局 StpLogic 集合中找到对应 type 的 StpLogic |
10021 | 指定的配置文件加载失败 |
10022 | 配置文件属性无法正常读取 |
10031 | 重置的侦听器集合不可以为空 |
10032 | 注册的侦听器不可以为空 |
10301 | 提供的 Same-Token 是无效的 |
10311 | 表示未能通过 Http Basic 认证校验 |
10321 | 提供的 HttpMethod 是无效的 |
11001 | 未能读取到有效Token |
11002 | 登录时的账号id值为空 |
11003 | 更改 Token 指向的 账号Id 时,账号Id值为空 |
11011 | 未能读取到有效Token |
11012 | Token无效 |
11013 | Token已过期 |
11014 | Token已被顶下线 |
11015 | Token已被踢下线 |
11016 | Token已被冻结 |
11031 | 在未集成 sa-token-jwt 插件时调用 getExtra() 抛出异常 |
11041 | 缺少指定的角色 |
11051 | 缺少指定的权限 |
11061 | 当前账号未通过服务封禁校验 |
11062 | 提供要解禁的账号无效 |
11063 | 提供要解禁的服务无效 |
11064 | 提供要解禁的等级无效 |
11071 | 二级认证校验未通过 |
12001 | 请求中缺少指定的参数 |
12002 | 构建 Cookie 时缺少 name 参数 |
12003 | 构建 Cookie 时缺少 value 参数 |
12101 | Base64 编码异常 |
12102 | Base64 解码异常 |
12103 | URL 编码异常 |
12104 | URL 解码异常 |
12111 | md5 加密异常 |
12112 | sha1 加密异常 |
12113 | sha256 加密异常 |
12114 | AES 加密异常 |
12115 | AES 解密异常 |
12116 | RSA 公钥加密异常 |
12117 | RSA 私钥加密异常 |
12118 | RSA 公钥解密异常 |
12119 | RSA 私钥解密异常 |
12201 | 参与参数签名的秘钥不可为空 |
12202 | 给定的签名无效 |
12203 | timestamp 超出允许的范围 |
sa-token-servlet
code码值 | 含义 |
---|---|
20001 | 转发失败 |
20002 | 重定向失败 |
sa-token-spring-boot-starter
code码值 | 含义 |
---|---|
20101 | 企图在非 Web 上下文获取 Request、Response 等对象 |
20103 | 对象转 JSON 字符串失败 |
20104 | JSON 字符串转 Map 失败 |
20105 | 默认的 Filter 异常处理函数 |
sa-token-reactor-spring-boot-starter
code码值 | 含义 |
---|---|
20203 | 对象转 JSON 字符串失败 |
20204 | JSON 字符串转 Map 失败 |
20205 | 默认的 Filter 异常处理函数 |
sa-token-solon-plugin
code码值 | 含义 |
---|---|
20301 | 默认的拦截器异常处理函数 |
20302 | 默认的 Filter 异常处理函数 |
sa-token-sso 单点登录相关:
code码值 | 含义 |
---|---|
30001 | redirect 重定向 url 是一个无效地址 |
30002 | redirect 重定向 url 不在 allowUrl 允许的范围内 |
30003 | 接口调用方提供的 secretkey 秘钥无效 |
30004 | 提供的 ticket 是无效的 |
30005 | 在模式三下,sso-client 调用 sso-server 端 校验ticket接口 时,得到的响应是校验失败 |
30006 | 在模式三下,sso-client 调用 sso-server 端 单点注销接口 时,得到的响应是注销失败 |
30007 | http 请求调用 提供的 timestamp 与当前时间的差距超出允许的范围 |
30008 | http 请求调用 提供的 sign 无效 |
30009 | 本地系统没有配置 secretkey 字段 |
30010 | 本地系统没有配置 http 请求处理器 |
30011 | 该 ticket 不属于当前 client |
sa-token-oauth2 相关:
code码值 | 含义 |
---|---|
30101 | client_id 不可为空 |
30102 | scope 不可为空 |
30103 | redirect_uri 不可为空 |
30104 | LoginId 不可为空 |
30105 | 无效 client_id |
30106 | 无效 access_token |
30107 | 无效 client_token |
30108 | Access-Token 不具备指定的 Scope |
30109 | Client-Token 不具备指定的 Scope |
30110 | 无效 code 码 |
30111 | 无效 Refresh-Token |
30112 | 请求的 Scope 暂未签约 |
30113 | 无效 redirect_url |
30114 | 非法 redirect_url |
30115 | 无效 client_secret |
30120 | redirect_uri 不一致 |
30122 | client_id 不一致 |
30125 | 无效 response_type |
30126 | 无效 grant_type |
30127 | 无效 state |
30141 | 系统暂未开放的授权模式 |
30142 | 应用暂未开放的授权模式 |
30151 | 无效的请求 Method |
30191 | 其它异常 |
sa-token-jwt 插件相关:
code码值 | 含义 |
---|---|
30201 | 对 jwt 字符串解析失败 |
30202 | 此 jwt 的签名无效 |
30203 | 此 jwt 的 loginType 字段不符合预期 |
30204 | 此 jwt 已超时 |
30205 | 没有配置jwt秘钥 |
30206 | 登录时提供的账号id为空 |
sa-token-temp-jwt 插件相关:
code码值 | 含义 |
---|---|
30301 | jwt 模式没有提供秘钥 |
30302 | jwt 模式不可以删除 Token |
30303 | Token已超时 |
[!WARNING| label:注意] 部分插件因异常抛出点较少,暂未做状态码细分处理