package com.java2nb.common.exception; import com.java2nb.common.config.Constant; import com.java2nb.common.domain.LogDO; import com.java2nb.common.service.LogService; import com.java2nb.common.utils.HttpServletUtils; import com.java2nb.common.utils.R; import com.java2nb.common.utils.ShiroUtils; import com.java2nb.system.domain.UserDO; import org.apache.shiro.authz.AuthorizationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DuplicateKeyException; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.util.Date; /** * 异常处理器 */ @RestControllerAdvice public class CommonExceptionHandler { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired LogService logService; /** * 自定义业务异常处理 */ @ExceptionHandler(BusinessException.class) public R handleBusinessException(BusinessException e) { logger.error(e.getMessage(), e); return R.error(e.getCode(),e.getMessage()); } @ExceptionHandler(DuplicateKeyException.class) public R handleDuplicateKeyException(DuplicateKeyException e) { logger.error(e.getMessage(), e); return R.error("数据库中已存在该记录"); } @ExceptionHandler(org.springframework.web.servlet.NoHandlerFoundException.class) public R noHandlerFoundException(org.springframework.web.servlet.NoHandlerFoundException e) { logger.error(e.getMessage(), e); return R.error(404, "没找找到页面"); } @ExceptionHandler(AuthorizationException.class) public Object handleAuthorizationException(AuthorizationException e, HttpServletRequest request) { logger.error(e.getMessage(), e); if (HttpServletUtils.jsAjax(request)) { return R.error(403, "未授权"); } return new ModelAndView("error/403"); } @ExceptionHandler({Exception.class}) public Object handleException(Exception e, HttpServletRequest request) { LogDO logDO = new LogDO(); logDO.setGmtCreate(new Date()); logDO.setOperation(Constant.LOG_ERROR); logDO.setMethod(request.getRequestURL().toString()); logDO.setParams(e.toString()); UserDO current = ShiroUtils.getUser(); if(null!=current){ logDO.setUserId(current.getUserId()); logDO.setUsername(current.getUsername()); } logService.save(logDO); logger.error(e.getMessage(), e); if (HttpServletUtils.jsAjax(request)) { return R.error(500, "服务器错误,请联系管理员"); } return new ModelAndView("error/500"); } }