全局拦截sa-token 异常,并提醒用户异常原因

This commit is contained in:
2025-06-12 20:25:15 +08:00
parent c6382e3283
commit 9619b71211
3 changed files with 48 additions and 4 deletions

View File

@@ -13,6 +13,7 @@ public enum ErrorCode {
NOT_LOGIN_ERROR(40100, "未登录"), NOT_LOGIN_ERROR(40100, "未登录"),
USERNAME_OR_PASSWORD_ERROR(40200, "账号或密码错误"), USERNAME_OR_PASSWORD_ERROR(40200, "账号或密码错误"),
USER_DISABLE(40300, "用户被禁用"), USER_DISABLE(40300, "用户被禁用"),
TOKEN_INVALID(40400, "Token无效请重新登录"),
NO_AUTH_ERROR(40101, "无权限"), NO_AUTH_ERROR(40101, "无权限"),
NOT_FOUND_ERROR(40400, "请求数据不存在"), NOT_FOUND_ERROR(40400, "请求数据不存在"),
FORBIDDEN_ERROR(40300, "禁止访问"), FORBIDDEN_ERROR(40300, "禁止访问"),

View File

@@ -2,6 +2,8 @@ package com.yupi.springbootinit.config;
import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import com.yupi.springbootinit.common.ErrorCode;
import com.yupi.springbootinit.exception.BusinessException;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -11,9 +13,9 @@ public class SaTokenConfigure implements WebMvcConfigurer {
@Override @Override
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
// 注册Sa-Token的拦截器 // 注册Sa-Token的拦截器
registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
.addPathPatterns("/**") .addPathPatterns("/**")
.excludePathPatterns(getExcludePaths()); .excludePathPatterns(getExcludePaths());
} }
/** /**
@@ -33,7 +35,6 @@ public class SaTokenConfigure implements WebMvcConfigurer {
"/favicon.ico", "/favicon.ico",
// 你的其他放行路径,例如登录接口 // 你的其他放行路径,例如登录接口
"/user/doLogin" "/user/doLogin"
// "/save_data/add_host"
}; };
} }
} }

View File

@@ -1,5 +1,7 @@
package com.yupi.springbootinit.exception; package com.yupi.springbootinit.exception;
import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.util.SaResult;
import com.yupi.springbootinit.common.BaseResponse; import com.yupi.springbootinit.common.BaseResponse;
import com.yupi.springbootinit.common.ErrorCode; import com.yupi.springbootinit.common.ErrorCode;
import com.yupi.springbootinit.common.ResultUtils; import com.yupi.springbootinit.common.ResultUtils;
@@ -28,4 +30,44 @@ public class GlobalExceptionHandler {
log.error("RuntimeException", e); log.error("RuntimeException", e);
return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误"); return ResultUtils.error(ErrorCode.SYSTEM_ERROR, "系统错误");
} }
// 全局异常拦截拦截项目中的NotLoginException异常
@ExceptionHandler(NotLoginException.class)
public BaseResponse<?> handlerNotLoginException(NotLoginException nle)
throws Exception {
// 打印堆栈,以供调试
nle.printStackTrace();
// 判断场景值,定制化异常信息
String message = "";
if(nle.getType().equals(NotLoginException.NOT_TOKEN)) {
message = "未能读取到有效用户令牌";
}
else if(nle.getType().equals(NotLoginException.INVALID_TOKEN)) {
message = "令牌无效";
}
else if(nle.getType().equals(NotLoginException.TOKEN_TIMEOUT)) {
message = "令牌已过期";
}
else if(nle.getType().equals(NotLoginException.BE_REPLACED)) {
message = "令牌已被顶下线";
}
else if(nle.getType().equals(NotLoginException.KICK_OUT)) {
message = "令牌已被踢下线";
}
else if(nle.getType().equals(NotLoginException.TOKEN_FREEZE)) {
message = "令牌已被冻结";
}
else if(nle.getType().equals(NotLoginException.NO_PREFIX)) {
message = "未按照指定前缀提交令牌";
}
else {
message = "当前会话未登录";
}
// 返回给前端
return ResultUtils.error(ErrorCode.SYSTEM_ERROR.getCode(),message);
}
} }