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 ...
随机推荐
- 3360: [Usaco2004 Jan]算二十四
3360: [Usaco2004 Jan]算二十四 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6 Solved: 6[Submit][Statu ...
- springmvc.xml或spring.xml 能运行配置文件总是出现错误
1:在java开发时总遇到配置文件配置正确,可以运行但有时显示错误.例如下图 上面配置文件正确但有时显错就不能运行.原因是配置文件的约束项错了. 原因是自己的jar包和配置文件版本不同.如果电脑联网它 ...
- [Open Source] RabbitMQ 安装与使用
前言 吃多了拉就是队列,吃饱了吐就是栈 使用场景 对操作的实时性要求不高,而需要执行的任务极为耗时:(发送短信,邮件提醒,更新文章阅读计数,记录用户操作日志) 存在异构系统间的整合: 安装 下载 Er ...
- js 的DOM操作 2017-03-21
DOM(document object model) 文档对象模型 BOM(browse object model) 针对浏览器(如:弹出的窗口,滚动条等) 一.操作对象(注意大小写:注意elemen ...
- 标准之路网站上一篇文章《十天学会web标准(div+css)》的营养精华
以下精华出自如下链接,“http://www.aa25.cn/special/10day/index.shtml”,<十天学会web标准(DIV+CSS)>. 这个内容不要删掉:“< ...
- CSS3 贝塞尔曲线实现
cubic-bezier 曲线是 css3 动画的一个重要基石.另一个为 steps (ease 等都是 cubic-bezier 的特殊形式),css3 中的 cubic_bezier 曲线限制了首 ...
- vue学习笔记 计算属性(四)
计算属性就是vue实例里的computed属性,对应一个对象,里面可以放各种方法,方法的作用就是可以生成和数据变量对应的计算后的变量,跟数据相关的复杂逻辑变量,都可以使用计算属性实现,computed ...
- malloc函数及用法
动态存储分配在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变.C语言中不允许动态数组类型.例如:int n;scanf("%d",&n);int a[n ...
- Synchronized的用法
synchronized是Java中的关键字,是一种同步锁.它修饰的对象有以下几种: 1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码 ...
- oracle删除字段中的空格、回车及指定字符
create or replace procedure PROC_test is --Description:删除字段中的指定字符(回车chr(13).换行chr(10)) --By LiChao - ...