package com.dsh.guns.core.aop; import com.dsh.guns.core.base.tips.ErrorTip; import com.dsh.guns.core.common.exception.BizExceptionEnum; import com.dsh.guns.core.common.exception.InvalidKaptchaException; import com.dsh.guns.core.exception.GunsException; import com.dsh.guns.core.exception.ServiceException; import com.dsh.guns.core.log.LogManager; import com.dsh.guns.core.log.factory.LogTaskFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseStatus; import java.lang.reflect.UndeclaredThrowableException; import static com.dsh.guns.core.support.HttpKit.getIp; import static com.dsh.guns.core.support.HttpKit.getRequest; /** * 全局的的异常拦截器(拦截所有的控制器)(带有@RequestMapping注解的方法上都会拦截) * * @author fengshuonan * @date 2016年11月12日 下午3:19:56 */ @ControllerAdvice @Order(-1) public class GlobalExceptionHandler { private Logger log = LoggerFactory.getLogger(this.getClass()); /** * 拦截业务异常 */ @ExceptionHandler(GunsException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody public ErrorTip notFount(GunsException e) { LogManager.me().executeLog(LogTaskFactory.exceptionLog(1, e)); getRequest().setAttribute("tip", e.getMessage()); log.error("业务异常:", e); return new ErrorTip(e.getCode(), e.getMessage()); } /** * 用户未登录异常 */ // @ExceptionHandler(AuthenticationException.class) // @ResponseStatus(HttpStatus.UNAUTHORIZED) // public String unAuth(AuthenticationException e) { // log.error("用户未登陆:", e); // return "/login.html"; // } /** * 账号被冻结异常 */ // @ExceptionHandler(DisabledAccountException.class) // @ResponseStatus(HttpStatus.UNAUTHORIZED) // public String accountLocked(DisabledAccountException e, Model model) { // String username = getRequest().getParameter("username"); // LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号被冻结", getIp())); // model.addAttribute("tips", "账号被冻结"); // return "/login.html"; // } /** * 账号密码错误异常 */ // @ExceptionHandler(CredentialsException.class) // @ResponseStatus(HttpStatus.UNAUTHORIZED) // public String credentials(CredentialsException e, Model model) { // String username = getRequest().getParameter("username"); // LogManager.me().executeLog(LogTaskFactory.loginLog(username, "账号密码错误", getIp())); // model.addAttribute("tips", "账号密码错误"); // return "/login.html"; // } /** * 验证码错误异常 */ @ExceptionHandler(InvalidKaptchaException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) public String credentials(InvalidKaptchaException e, Model model) { String username = getRequest().getParameter("username"); LogManager.me().executeLog(LogTaskFactory.loginLog(username, "验证码错误", getIp())); model.addAttribute("tips", "验证码错误"); return "/login.html"; } /** * 无权访问该资源异常 */ @ExceptionHandler(UndeclaredThrowableException.class) @ResponseStatus(HttpStatus.UNAUTHORIZED) @ResponseBody public ErrorTip credentials(UndeclaredThrowableException e) { getRequest().setAttribute("tip", "权限异常"); log.error("权限异常!", e); return new ErrorTip(BizExceptionEnum.NO_PERMITION.getCode(), BizExceptionEnum.NO_PERMITION.getMessage()); } /** * 拦截未知的运行时异常 */ @ExceptionHandler(RuntimeException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody public ErrorTip notFount(RuntimeException e) { LogManager.me().executeLog(LogTaskFactory.exceptionLog(1, e)); getRequest().setAttribute("tip", "服务器未知运行时异常"); log.error("运行时异常:", e); return new ErrorTip(BizExceptionEnum.SERVER_ERROR.getCode(), BizExceptionEnum.SERVER_ERROR.getMessage()); } /** * 拦截业务运行时异常 */ @ExceptionHandler(ServiceException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) @ResponseBody public ErrorTip serviceException(ServiceException e) { log.error("业务运行时异常:{}", e.getMessage()); return new ErrorTip(e.getCode(), e.getMessage()); } }