@RestControllerAdvice
public class ExceptionController {
private final Logger logger = LoggerUtil.getLogger(ExceptionController.class);
// 捕捉shiro的异常
@ResponseStatus(HttpStatus.UNAUTHORIZED) //自定义浏览器返回状态码
@ExceptionHandler(ShiroException.class) //指定需要拦截的异常类型
public ResponseBean handle401(ShiroException e) {
logger.error(e.getMessage());
return new ResponseBean("401", e.getMessage(), "N",null);
}
// 捕捉UnauthorizedException
@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ExceptionHandler(UnauthorizedException.class)
public ResponseBean handle401() {
return new ResponseBean("401", "Unauthorized", "N",null);
}
// 捕捉UnauthorizedException
@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ExceptionHandler(AuthenticationException.class)
public ResponseBean handle406() {
return new ResponseBean("406", "Unauthorized", "N",null);
}
// 捕捉其他所有异常
@ExceptionHandler(Exception.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public ResponseBean globalException(HttpServletRequest request, Throwable e) {
logger.error(e.getMessage());
return new ResponseBean(String.valueOf(getStatus(request).value()), e.getMessage(), "N",null);
}
private HttpStatus getStatus(HttpServletRequest request) {
Integer statusCode = (Integer) request.getAttribute("javax.servlet.error.status_code");
if (statusCode == null) {
return HttpStatus.INTERNAL_SERVER_ERROR;
}
return HttpStatus.valueOf(statusCode);
}
}