Web层框架对网站中所有异常的统一处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Web层框架对网站中所有异常的统一处理相关的知识,希望对你有一定的参考价值。

    

一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常。 

  之前都是在Struts2的配置文件中配置拦截器来统一处理系统中所有的异常,给大家带点伪代码吧,好歹曾经用过,呵呵。

配置文件配置信息如下:

技术分享

 1   <package name="base" extends="struts-default"> 2         <!-- 异常处理 --> 3         <interceptors> 4             <!-- 1.声明自定义异常拦截器 --> 5             <interceptor name="exceptionInterceptor" class="com.it.yycg.framework.exception.ExceptionInterceptor"></interceptor> 6             <!-- 2.声明拦截器栈  --> 7             <interceptor-stack name="customStack"> 8                 <interceptor-ref name="exceptionInterceptor"/> 9                 <interceptor-ref name="defaultStack"/>10             </interceptor-stack>11         </interceptors>12         <!-- 设置默认执行的拦截器 -->13         <default-interceptor-ref name="customStack"/>14         <!-- 公用的 result -->15         <global-results>16             <result name="error_jsp" >/common/error.jsp</result>17             <!-- 拒绝访问返回页面 -->18             <result name="refuse" >/common/refuse.jsp</result>19         </global-results>20         21         <!-- 配置访问Action返回jsp页面的标签 
22             Struts默认执行类ActionSupport中的execute()方法23             class默认ActionSupport24             成功后的返回name默认为success25         -->26         <action name="ui_*_*">27             <result>/business/{1}/{2}.jsp</result>28         </action>        
29     </package>

技术分享

Java类伪代码如下:

技术分享

          ExceptionInterceptor          serialVersionUID = -3570177760250354837L       String intercept(ActionInvocation actionInvocation)          HttpServletRequest request =         String result =                                    result =         }                                         ExceptionResultInfo exceptionResultInfo =                            (e                  exceptionResultInfo =             }   (e  UnknownAccountException || e                  ResultInfo resultInfo = ResultUtil.createFail("用户名或密码错误!"                 exceptionResultInfo =              }   (e                  ResultInfo resultInfo = ResultUtil.createFail("没有权限!"                 exceptionResultInfo =

技术分享

 

首先说说springmvc处理统一异常的方式,目前就我了解的有三种:直接使用springmvc提供的异常处理器、自己手动配置自定义全局异常处理器和使用注解(该种方式没用过)。  

  先说一下第一种吧,它是直接在springmvc的核心配置文件中配置springmvc自身提供的简单异常处理器。

技术分享

 1   <!-- springmvc提供的简单异常处理器 --> 2     <!-- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> 3          定义默认的异常处理页面 4         <property name="defaultErrorView" value="/WEB-INF/jsp/exception.jsp"/>                                    
 5         定义异常处理页面用来获取异常信息的变量名,也可不定义,默认名为exception 
 6         <property name="exceptionAttribute" value="ex"/> 7         定义需要特殊处理的异常,这是重要点 
 8         <property name="exceptionMappings"> 9             <props>10                 <prop key="com.tgsit.cjd.model.CustomException">exception</prop>11             </props>12             还可以定义其他的自定义异常13         </property>14     </bean> -->

技术分享

 

  第二种就是自己定义一个异常处理器,然后通过在springmvc的核心配置文件中配置即可。

自定义异常处理器类伪代码如下:

技术分享

 1 /** 2  * 自定义全局异常处理器: 3  */ 4 public class CustomExceptionResolver implements HandlerExceptionResolver { 5     @Override 6     public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, 7             Exception ex) { 8          9         ex.printStackTrace();10         CustomException customException = null;11         //如果抛出的是自定义的异常则直接转换12         if(ex instanceof CustomException) {13             customException = (CustomException) ex;14         } else {15             //如果抛出的不是自定义的异常则重新构造一个未知错误异常16             new SysException("系统正在维护中,请稍后重试...");17         }18         //向前台返回错误信息19         ModelAndView modelAndView = new ModelAndView("exception");20         modelAndView.addObject("message", customException.getMessage());21         return modelAndView;22     }23 }

技术分享

springmvc配置文件配置信息如下(各位在迫不得已的情况复制的时候记得修改一下包名):

1 <!-- 配置自定义的全局异常处理器      只要实现HandlerExceptionResolver接口就是全局异常处理器-->2 <bean class="com.tgsit.cjd.utils.CustomExceptionResolver"/>

 


以上是关于Web层框架对网站中所有异常的统一处理的主要内容,如果未能解决你的问题,请参考以下文章

统一异常处理

SpringMVC统一异常处理

Spring Boot的统一异常处理

SpringMVC学习07SpringMVC中的统一异常处理

Springboot对Controller层方法进行统一异常处理

Spring全局异常处理的三种方式