【更新】优化流下载接口在权限校验时的异常处理

pull/94/head
徐玉祥 2023-03-13 22:48:52 +08:00
parent 4181fd0aca
commit bbb634e9f4
2 changed files with 27 additions and 6 deletions

View File

@ -19,8 +19,11 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import vip.xiaonuo.common.pojo.CommonResult;
import vip.xiaonuo.common.util.CommonResponseUtil;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Whitelabel Error Page
@ -39,7 +42,7 @@ public class GlobalErrorViewController {
* @date 2022/2/11 16:11
**/
@RequestMapping("/errorView")
public CommonResult<String> globalError(HttpServletRequest request) {
public void globalError(HttpServletRequest request, HttpServletResponse response) throws IOException {
CommonResult<String> commonResult = new CommonResult<>(404, "路径不存在", null);
Object model = request.getAttribute("model");
if(ObjectUtil.isNotEmpty(model)) {
@ -57,6 +60,6 @@ public class GlobalErrorViewController {
exception.printStackTrace();
}
log.error(">>> {}", commonResult.getMsg());
return commonResult;
CommonResponseUtil.renderError(response, commonResult.getMsg());
}
}

View File

@ -15,11 +15,13 @@ package vip.xiaonuo.core.handler;
import cn.dev33.satoken.exception.SaTokenException;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpStatus;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.PersistenceException;
import org.mybatis.spring.MyBatisSystemException;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult;
@ -33,10 +35,13 @@ import org.springframework.web.multipart.support.MissingServletRequestPartExcept
import vip.xiaonuo.auth.core.util.AuthExceptionUtil;
import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.pojo.CommonResult;
import vip.xiaonuo.common.util.CommonResponseUtil;
import vip.xiaonuo.common.util.CommonServletUtil;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import java.io.IOException;
import java.util.List;
import java.util.Set;
@ -112,9 +117,22 @@ public class GlobalExceptionUtil {
//文件上传错误特殊提示
commonResult = CommonResult.error("请选择要上传的文件并检查文件参数名称是否正确");
} else if (e instanceof SaTokenException) {
// 如果是SaToken相关异常则由AuthExceptionUtil处理
return AuthExceptionUtil.getCommonResult(e);
CommonResult<String> saTokenCommonResult = AuthExceptionUtil.getCommonResult(e);
HttpServletRequest request = CommonServletUtil.getRequest();
String accept = request.getHeader(Header.ACCEPT.getValue());
// 此时异常可能是SaToken的过滤器异常如果是流下载等接口需要直接渲染异常信息
if(ObjectUtil.isNotEmpty(accept) && accept.equals(MediaType.APPLICATION_OCTET_STREAM_VALUE)) {
try {
CommonResponseUtil.renderError(CommonServletUtil.getResponse(), e.getMessage());
return null;
} catch (IOException ioException) {
ioException.printStackTrace();
commonResult = CommonResult.error("服务器异常");
}
} else {
// 如果是SaToken相关异常则由AuthExceptionUtil处理
return saTokenCommonResult;
}
} else if(e instanceof MyBatisSystemException) {
// 如果是MyBatisSystemException
@ -128,7 +146,7 @@ public class GlobalExceptionUtil {
e.printStackTrace();
commonResult = CommonResult.error("数据操作异常");
}
} else {
}else {
e.printStackTrace();
commonResult = CommonResult.error("数据操作异常");
}