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

本文介绍了如何在Spring Security中对403、404、500等错误进行统一处理,包括界面跳转时的错误处理和AJAX请求的错误处理。对于界面跳转错误,通过配置web.xml;对于AJAX请求,自定义AccessDeniedHandler,并在前端使用common.vm和ajaxError.js实现全局异常管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

<error-page>
	<error-code>500</error-code>
	<location>/WEB-INF/views/error/500.jsp</location>
</error-page>
<error-page>
	<error-code>404</error-code>
	<location>/WEB-INF/views/error/404.jsp</location>
</error-page>
<error-page>
	<error-code>403</error-code>
	<location>/WEB-INF/views/error/403.jsp</location>
</error-page>


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("<div id='ajaxInfo'
				// style=''>正在加载,请稍后...</div>");
			},
			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修改为用户体验更好的提示即可


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值