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 ...
随机推荐
- 搭建企业级NFS网络文件共享服务说明[一]
1.1.0. 概述: 共享/NFS目录给整个192.168.25.0/24网段主机读写 man nfs 可以查看mount的信息 rpc端口111 nfs主端口2049 1.1.1. 搭建NFS环境 ...
- Linux----CentOS-7搭建免流服务器(iOS 端)
本次实验采用腾讯云服务器:https://cloud.tencent.com/ 大学生身份的可以看看有没有什么活动购买 其他身份的78一个月 关于腾讯云服务器的使用可以看看腾讯云的使用手册 本博客涉及 ...
- Hadoop HBase概念学习系列之HBase里的存储数据流程(二十三)
这个,很简单,但凡是略懂大数据的,就很清楚,不多说,直接上图.
- NCE3
Lesson1 A puma at large Pumas are large, cat-like animals which are found in America. When reports ...
- Django ImportError 模块路径正确,且将文件夹设置为Source Root
问题描述: 在用PyCharm进行Django项目开发时,由于业务需求需要增加一个外键字段,但在引入外键关联的model时,报错ImportError 解决方案: 无奈中,尝试更改导入模块语句的位置, ...
- Programming Assignment 5: Burrows–Wheeler Data Compression
编程作业五 作业链接:Burrows-Wheeler Data Compression & Checklist 我的代码:MoveToFront.java & CircularSuff ...
- [李居丽][다이아몬드][Diamond]
歌词来源:http://music.163.com/#/song?id=484056974 作曲 : Damon Sharpe/JOHN HO/JEFF SHUM [作曲 : Damon Sharpe ...
- Result工具类
使用ajax请求访问时,可以用此工具类作为返回对象,也方便统一代码规范 package com.ujia.entity; import java.io.Serializable; public cla ...
- was集群下基于接口分布式架构和开发经验谈
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/luozhonghua2014/article/details/34084935 某b项目是我首 ...
- 4698. [SDOI2008]Sandy的卡片【后缀数组】
Description Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积 攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记, ...