Web层框架对网站中所有异常的统一处理
一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常。
之前都是在Struts2的配置文件中配置拦截器来统一处理系统中所有的异常,给大家带点伪代码吧,好歹曾经用过,呵呵。
配置文件配置信息如下:
<package name="base" extends="struts-default">
<!-- 异常处理 -->
<interceptors>
<!-- 1.声明自定义异常拦截器 -->
<interceptor name="exceptionInterceptor" class="com.it.yycg.framework.exception.ExceptionInterceptor"></interceptor>
<!-- 2.声明拦截器栈 -->
<interceptor-stack name="customStack">
<interceptor-ref name="exceptionInterceptor"/>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<!-- 设置默认执行的拦截器 -->
<default-interceptor-ref name="customStack"/>
<!-- 公用的 result -->
<global-results>
<result name="error_jsp" >/common/error.jsp</result>
<!-- 拒绝访问返回页面 -->
<result name="refuse" >/common/refuse.jsp</result>
</global-results> <!-- 配置访问Action返回jsp页面的标签
Struts默认执行类ActionSupport中的execute()方法
class默认ActionSupport
成功后的返回name默认为success
-->
<action name="ui_*_*">
<result>/business/{1}/{2}.jsp</result>
</action>
</package>
Java类伪代码如下:
/**
* 定义一个拦截器,作为系统统一异常处理类
*
* @author Easong
*
*/
public class ExceptionInterceptor extends AbstractInterceptor {
private static final long serialVersionUID = -3570177760250354837L;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
HttpServletRequest request = ServletActionContext.getRequest();
String result = null;
try {
// 向后继续执行拦截器,最终拦截器执行完成执行action,最终action返回逻辑视图名赋值给result
result = actionInvocation.invoke();
} catch (Exception e) {
e.printStackTrace();
// 进行异常处理
// 异常流程
ExceptionResultInfo exceptionResultInfo = null;
// 如果是自定义的异常,直接获取异常信息
if (e instanceof ExceptionResultInfo) {
exceptionResultInfo = (ExceptionResultInfo) e;
} else if (e instanceof UnknownAccountException || e instanceof IncorrectCredentialsException) {
ResultInfo resultInfo = ResultUtil.createFail("用户名或密码错误!");
exceptionResultInfo = new ExceptionResultInfo(resultInfo);
} else if (e instanceof UnauthorizedException) {
ResultInfo resultInfo = ResultUtil.createFail("没有权限!");
exceptionResultInfo = new ExceptionResultInfo(resultInfo);
}
首先说说springmvc处理统一异常的方式,目前就我了解的有三种:直接使用springmvc提供的异常处理器、自己手动配置自定义全局异常处理器和使用注解(该种方式没用过)。
先说一下第一种吧,它是直接在springmvc的核心配置文件中配置springmvc自身提供的简单异常处理器。
<!-- springmvc提供的简单异常处理器 -->
<!-- <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
定义默认的异常处理页面
<property name="defaultErrorView" value="/WEB-INF/jsp/exception.jsp"/>
定义异常处理页面用来获取异常信息的变量名,也可不定义,默认名为exception
<property name="exceptionAttribute" value="ex"/>
定义需要特殊处理的异常,这是重要点
<property name="exceptionMappings">
<props>
<prop key="com.tgsit.cjd.model.CustomException">exception</prop>
</props>
还可以定义其他的自定义异常
</property>
</bean> -->
第二种就是自己定义一个异常处理器,然后通过在springmvc的核心配置文件中配置即可。
自定义异常处理器类伪代码如下:
/**
* 自定义全局异常处理器:
*/
public class CustomExceptionResolver implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) { ex.printStackTrace();
CustomException customException = null;
//如果抛出的是自定义的异常则直接转换
if(ex instanceof CustomException) {
customException = (CustomException) ex;
} else {
//如果抛出的不是自定义的异常则重新构造一个未知错误异常
new SysException("系统正在维护中,请稍后重试...");
}
//向前台返回错误信息
ModelAndView modelAndView = new ModelAndView("exception");
modelAndView.addObject("message", customException.getMessage());
return modelAndView;
}
}
springmvc配置文件配置信息如下(各位在迫不得已的情况复制的时候记得修改一下包名):
<!-- 配置自定义的全局异常处理器 只要实现HandlerExceptionResolver接口就是全局异常处理器-->
<bean class="com.tgsit.cjd.utils.CustomExceptionResolver"/>
最后你随便制造一个异常,不管程序运行时异常还是自定义异常,页面跳转都会跳转到指定页面,再也不会干巴巴的给用户返回500啊、404啊那样sb的错误。可能写的有点糙,但是主干原理都按流程给大家总结了,如有不对,望给为留言指正,谢谢!
最后给大家送上一个开发便捷工具,是一位博友分享的,感觉非常好用,大家瞅一眼吧。【http://www.ofmonkey.com/】
Web层框架对网站中所有异常的统一处理的更多相关文章
- Web层框架对网站中所有异常的统一解决
一个网站的异常信息作为专业的人士,是不会轻易暴露给用户的,因为那样狠不安全,显得你漏是一回事,只要还是考虑到网站的数据安全问题,下面给大家分享一下一些常见的web层框架是如何处理统一的异常. 之前都是 ...
- MVC模式设计的Web层框架初识
struts是个什么东西? struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类 ...
- ASP.NET Web API Selfhost宿主环境中管道、路由
ASP.NET Web API Selfhost宿主环境中管道.路由 前言 前面的几个篇幅对Web API中的路由和管道进行了简单的介绍并没有详细的去说明一些什么,然而ASP.NET Web API这 ...
- 从零开始编写自己的C#框架(17)——Web层后端首页
后端首页是管理员登陆后进入的第一个页面,主要是显示当前登陆用户信息.在线人数.菜单树列表.相关功能按键和系统介绍.让管理员能更方便的找到息想要的内容. 根据不同系统的需要,首页会显示不同的内容,比如显 ...
- 从零开始编写自己的C#框架(16)——Web层后端父类
本章节讲述的各个类是后端系统的核心之一,涉及到系统安全验证.操作日志记录.页面与按键权限控制.后端页面功能封装等内容,希望学习本系列的朋友认真查看新增的类与函数,这对以后使用本框架进行开发时非常重要. ...
- 在 Web 层应用程序中使用Spring
前面已经配置成功后,就可以在Web 层的Servlet或Jsp中调用访问Spring了,如果你 编制的是一个Servlet/Jsp 程序,那么在你的Servlet/Jsp 使用下面的代码通过Sprin ...
- spring-boot+mybatis开发实战:如何在spring-boot中使用myabtis持久层框架
前言: 本项目基于maven构建,使用mybatis-spring-boot作为spring-boot项目的持久层框架 spring-boot中使用mybatis持久层框架与原spring项目使用方式 ...
- 03 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之web层
Github:https://github.com/nnngu 项目源代码:https://github.com/nnngu/nguSeckill 前端交互流程设计 对于一个系统,需要产品经理.前端工 ...
- 在ABP的Web层中实现复杂请求跨域访问
在最近的项目中,后端使用ABP,前端采用React,前后端完全分离.其中大部分接口都通过WebApi层调用,项目中未使用Session.但最后在添加一个网站的验证码验证留言功能时,使用了Session ...
随机推荐
- APUE4.4设置用户ID和设置组ID && 4.5文件访问权限
- Django ImportError 模块路径正确,且将文件夹设置为Source Root
问题描述: 在用PyCharm进行Django项目开发时,由于业务需求需要增加一个外键字段,但在引入外键关联的model时,报错ImportError 解决方案: 无奈中,尝试更改导入模块语句的位置, ...
- 教你用 jVectorMap 制作属于自己的旅行足迹
jVectorMap JVectorMap 是一个优秀的.兼容性强的 jQuery 地图插件. 它可以工作在包括 IE6 在内的各款浏览器中,矢量图输出,除官方提供各国地图数据外,用户可以使用数据转换 ...
- bin/hdfs dfs命令
appendToFile Usage: hdfs dfs -appendToFile <localsrc> ... <dst> 追加一个或者多个文件到hdfs制定文件中.也可以 ...
- JavaScript基础进阶之常用字符串方法总结
前面三篇文章简单的把JavaScript基础内容过了一遍,我们已经可以用JavaScript写一些简单的代码了. 今天主要总结一下JavaScript中String对象中自带的一些方法,来帮助我们处理 ...
- css-table属性运用
最近在工作中遇到了一些不常用的布局,很多使用 CSS table 属性,并结合 ::before,::after 伪元素完成了,使得 HTML 的结构相对更简单,更具有语义性.当 HTML 结构越清晰 ...
- swift的Hashable
Conforming to the Hashable Protocol To use your own custom type in a set or as the key type of a dic ...
- Type Safety and Type Inference
Swift is a type-safe language. A type safe language encourages you to be clear about the types of va ...
- 1051. [HAOI2006]受欢迎的牛【强连通分量】
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也 ...
- PAT乙级1016
1016 部分A+B (15 分) 正整数 A 的“DA(为 1 位整数)部分”定义为由 A 中所有 DA 组成的新整数 PA.例如:给定 A=3862767,DA=6,则 ...