diff --git a/src/main/java/com/yupi/springbootinit/common/ErrorCode.java b/src/main/java/com/yupi/springbootinit/common/ErrorCode.java index e6e00d8..4b24d6d 100644 --- a/src/main/java/com/yupi/springbootinit/common/ErrorCode.java +++ b/src/main/java/com/yupi/springbootinit/common/ErrorCode.java @@ -13,6 +13,7 @@ public enum ErrorCode { NOT_LOGIN_ERROR(40100, "未登录"), USERNAME_OR_PASSWORD_ERROR(40200, "账号或密码错误"), USER_DISABLE(40300, "用户被禁用"), + TOKEN_INVALID(40400, "Token无效,请重新登录"), NO_AUTH_ERROR(40101, "无权限"), NOT_FOUND_ERROR(40400, "请求数据不存在"), FORBIDDEN_ERROR(40300, "禁止访问"), diff --git a/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java b/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java index a1f2aea..15be427 100644 --- a/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java +++ b/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java @@ -2,6 +2,8 @@ package com.yupi.springbootinit.config; import cn.dev33.satoken.interceptor.SaInterceptor; 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.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -11,9 +13,9 @@ public class SaTokenConfigure implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 注册Sa-Token的拦截器 - registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) - .addPathPatterns("/**") - .excludePathPatterns(getExcludePaths()); + registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) + .addPathPatterns("/**") + .excludePathPatterns(getExcludePaths()); } /** @@ -33,7 +35,6 @@ public class SaTokenConfigure implements WebMvcConfigurer { "/favicon.ico", // 你的其他放行路径,例如登录接口 "/user/doLogin" -// "/save_data/add_host" }; } } \ No newline at end of file diff --git a/src/main/java/com/yupi/springbootinit/exception/GlobalExceptionHandler.java b/src/main/java/com/yupi/springbootinit/exception/GlobalExceptionHandler.java index 610ca49..bdd1d66 100644 --- a/src/main/java/com/yupi/springbootinit/exception/GlobalExceptionHandler.java +++ b/src/main/java/com/yupi/springbootinit/exception/GlobalExceptionHandler.java @@ -1,5 +1,7 @@ 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.ErrorCode; import com.yupi.springbootinit.common.ResultUtils; @@ -28,4 +30,44 @@ public class GlobalExceptionHandler { log.error("RuntimeException", e); 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); + } + }