全局拦截sa-token 异常,并提醒用户异常原因
This commit is contained in:
@@ -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, "禁止访问"),
|
||||||
|
|||||||
@@ -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"
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user