Spring-Security笔记7 错误页面统一处理

指对403、404、500等错误的处理
错误处理,分为2种:界面跳转时的错误和AJAX请求的错误

1、界面跳转的错误,在web.xml中配置,例


	500
	/WEB-INF/views/error/500.jsp


	404
	/WEB-INF/views/error/404.jsp


	403
	/WEB-INF/views/error/403.jsp


2、AJAX请求的错误

首先,自定义spring-security的AccessDeniedHandler,当判断请求为AJAX请求时,使response.sendError(403);发送403错误。可参考上一节,“Spring-Security笔记6 自定义AccessDeniedHandler”

然后在界面做出统一的规划.所有界面使用以下语句引入common.vm:

#parse("common/common.vm")

在common.vm中引入ajaxError.js

$(function() {
	// 首先备份下jquery的ajax方法
	var _ajax = $.ajax;
	// 重写jquery的ajax方法
	$.ajax = function(opt) {
		// 备份opt中error和success方法
		var fn = {
			error : function(XMLHttpRequest, textStatus, errorThrown) {
			},
			success : function(data, textStatus) {
			}
		}
		if (opt.error) {
			fn.error = opt.error;
		}
		if (opt.success) {
			fn.success = opt.success;
		}
		// 扩展增强处理
		var _opt = $.extend(opt, {
			error : function(XMLHttpRequest, textStatus, errorThrown) {
				switch (XMLHttpRequest.status) {
				case 400:
					// 未授权异常
					alert("请求无效");
					break;
				case 403:
					// 未授权异常
					alert("您没有访问权限");
					break;
				case 404:
					alert("您访问的资源不存在");
					break;
				case 500:
					alert("内部服务器错误");
					break;
				}
				// 打印responseText,方便排查问题
				console.log(XMLHttpRequest.responseText);
				// 错误方法增强处理
				fn.error(XMLHttpRequest, textStatus, errorThrown);
			},
			success : function(data, textStatus) {
				if (data.sessionInvalid) {
					// 跳转到登录页面,这里要加上top.为了防止在iframe界面中弹出了登录界面
					top.location.href = 'toLogin.do?message=' + data.message;
					return;
				}
				if (!textStatus) {
					showMsg(data.errorMsg, "操作失败,错误信息", 0, 200, 400);
				} else if (typeof (data.success) != 'undefined'
						&& !data.success) {
					showMsg(data.errorMsg, "操作失败,错误信息", 0, 200, 400);
				} else {
					fn.success(data, textStatus);// 成功回调方法增强处理
				}
			},
			beforeSend : function(XHR) {
				// 提交前回调方法,全局统一的等待提示框
				// 例如$('body').append("
正在加载,请稍后...
"); }, complete : function(XHR, TS) { // 请求完成后回调函数 (请求成功或失败之后均调用)。 // 取消全局统一的等待提示框,例如//$("#ajaxInfo").remove(); } }); return _ajax(_opt); }; });

其中的

case 400:
	// 未授权异常
	alert("请求无效");
	break;
case 403:
	// 未授权异常
	alert("您没有访问权限");
	break;
case 404:
	alert("您访问的资源不存在");
	break;
case 500:
	alert("内部服务器错误");
        break;

就是对400、403、404、500等异常做出了全局统一的管理

在实际项目中,只需要把alert修改为用户体验更好的提示即可


你可能感兴趣的:(Spring-Security)