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

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.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import vip.xiaonuo.common.pojo.CommonResult; import vip.xiaonuo.common.pojo.CommonResult;
import vip.xiaonuo.common.util.CommonResponseUtil;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/** /**
* Whitelabel Error Page * Whitelabel Error Page
@ -39,7 +42,7 @@ public class GlobalErrorViewController {
* @date 2022/2/11 16:11 * @date 2022/2/11 16:11
**/ **/
@RequestMapping("/errorView") @RequestMapping("/errorView")
public CommonResult<String> globalError(HttpServletRequest request) { public void globalError(HttpServletRequest request, HttpServletResponse response) throws IOException {
CommonResult<String> commonResult = new CommonResult<>(404, "路径不存在", null); CommonResult<String> commonResult = new CommonResult<>(404, "路径不存在", null);
Object model = request.getAttribute("model"); Object model = request.getAttribute("model");
if(ObjectUtil.isNotEmpty(model)) { if(ObjectUtil.isNotEmpty(model)) {
@ -57,6 +60,6 @@ public class GlobalErrorViewController {
exception.printStackTrace(); exception.printStackTrace();
} }
log.error(">>> {}", commonResult.getMsg()); 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.dev33.satoken.exception.SaTokenException;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.http.Header;
import cn.hutool.http.HttpStatus; import cn.hutool.http.HttpStatus;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.exceptions.PersistenceException; import org.apache.ibatis.exceptions.PersistenceException;
import org.mybatis.spring.MyBatisSystemException; import org.mybatis.spring.MyBatisSystemException;
import org.springframework.http.HttpMethod; import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.validation.BindingResult; 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.auth.core.util.AuthExceptionUtil;
import vip.xiaonuo.common.exception.CommonException; import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.pojo.CommonResult; import vip.xiaonuo.common.pojo.CommonResult;
import vip.xiaonuo.common.util.CommonResponseUtil;
import vip.xiaonuo.common.util.CommonServletUtil; import vip.xiaonuo.common.util.CommonServletUtil;
import javax.servlet.http.HttpServletRequest;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException; import javax.validation.ConstraintViolationException;
import java.io.IOException;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -112,9 +117,22 @@ public class GlobalExceptionUtil {
//文件上传错误特殊提示 //文件上传错误特殊提示
commonResult = CommonResult.error("请选择要上传的文件并检查文件参数名称是否正确"); commonResult = CommonResult.error("请选择要上传的文件并检查文件参数名称是否正确");
} else if (e instanceof SaTokenException) { } else if (e instanceof SaTokenException) {
CommonResult<String> saTokenCommonResult = AuthExceptionUtil.getCommonResult(e);
// 如果是SaToken相关异常则由AuthExceptionUtil处理 HttpServletRequest request = CommonServletUtil.getRequest();
return AuthExceptionUtil.getCommonResult(e); 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) { } else if(e instanceof MyBatisSystemException) {
// 如果是MyBatisSystemException // 如果是MyBatisSystemException
@ -128,7 +146,7 @@ public class GlobalExceptionUtil {
e.printStackTrace(); e.printStackTrace();
commonResult = CommonResult.error("数据操作异常"); commonResult = CommonResult.error("数据操作异常");
} }
} else { }else {
e.printStackTrace(); e.printStackTrace();
commonResult = CommonResult.error("数据操作异常"); commonResult = CommonResult.error("数据操作异常");
} }