GlobalHandlerExceptionResolver.java 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.yihu.jw.config.mvc;
  2. import com.yihu.jw.restmodel.exception.SecurityException;
  3. import com.yihu.jw.restmodel.exception.SystemException;
  4. import com.yihu.jw.restmodel.exception.business.JiWeiException;
  5. import com.yihu.jw.restmodel.exception.business.ManageException;
  6. import com.yihu.jw.restmodel.gateway.GatewayContanrts;
  7. import org.json.JSONObject;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.cloud.sleuth.Tracer;
  12. import org.springframework.stereotype.Component;
  13. import org.springframework.web.servlet.HandlerExceptionResolver;
  14. import org.springframework.web.servlet.ModelAndView;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import java.io.PrintWriter;
  18. /**
  19. * Created by chenweida on 20170317.
  20. * 全局异常处理
  21. */
  22. @Component
  23. public class GlobalHandlerExceptionResolver implements HandlerExceptionResolver {
  24. private Logger logger = LoggerFactory.getLogger(GlobalHandlerExceptionResolver.class);
  25. private static Integer status_403 = 403;//没权限 未登录 等权限异常
  26. private static Integer status_500 = 500;//后台异常
  27. private static Integer status_510 = 510;//基卫系统异常
  28. private static Integer status_511 = 511;//后台管理系统异常
  29. @Autowired
  30. private Tracer tracer;
  31. /**
  32. * 在这里处理所有得异常信息
  33. */
  34. @Override
  35. public ModelAndView resolveException(HttpServletRequest req, HttpServletResponse resp, Object o, Exception ex) {
  36. String error = ex.getMessage();
  37. logger.error(error);
  38. if (ex instanceof ManageException) {
  39. //后台管理系统异常
  40. printWrite(status_511, error, resp);
  41. } else if (ex instanceof SecurityException) {
  42. //权限异常
  43. printWrite(status_403, error, resp);
  44. } else if (ex instanceof JiWeiException) {
  45. //基卫系统异常
  46. printWrite(status_510, error, resp);
  47. } else {
  48. //系统异常
  49. printWrite(status_500, error, resp);
  50. }
  51. return new ModelAndView();
  52. }
  53. /**
  54. * 将错误信息添加到response中
  55. */
  56. public void printWrite(int status, String msg, HttpServletResponse response) {
  57. try {
  58. JSONObject jo=new JSONObject();
  59. jo.put("status",status);
  60. jo.put("msg",msg);
  61. tracer.getCurrentSpan().tag(GatewayContanrts.ZipkinElasticKey.gateway_error_params,jo.toString());
  62. response.setStatus(status);
  63. response.setCharacterEncoding("UTF-8");//设置编码
  64. response.setHeader("Cache-Control", "no-store");
  65. response.setHeader("Pragma", "no-cache");
  66. response.setHeader("Content-Type", "Content-Type: text/html; charset=utf-8");
  67. response.setHeader("Accept Encoding", "utf-8");
  68. PrintWriter pw = response.getWriter();
  69. pw.write(msg);
  70. pw.flush();
  71. pw.close();
  72. } catch (Exception e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. }