Ajax请求Session过期简单实现

务端会判断是否存在Session、而用户请求服务端常用异步请求方法(Ajax),这时Session过期,将无法使当前页面跳转到登录页面。


具体思路:在当前页面document中加一个ajax请求拦截的ajaxError事件,服务端判断session是否过期,如果过期返回一个错误代码如401,然后ajaxError拦截错误判断是服务端的401错误,则将跳转到登录页面。

服务端判断Session失效

服务端一般是拦截器判断Session是否失效、存在,判断用户请求是否是异步请求,异步请求Session失效 设置401返回码,
resp.sendError(401),如果不是异步则直接跳转到登录页面

publicclass SessionInterceptor implementsHandlerInterceptor {
 
    @Override
    publicvoid afterCompletion(HttpServletRequest request, HttpServletResponse response,
            Object handler, Exception ex) throwsException {
    }
 
    @Override
    publicvoid postHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler, ModelAndView modelAndView) throwsException {
    }
 
    @Override
    publicboolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throwsException {
        
	SysUser user = SysUserUtils.getUser();
	if (user.getSysUserid() != null) {
            returntrue;
        }
        //session 失效处理
        String requestType = request.getHeader("X-Requested-With");
        if(StringUtils.isNotEmpty(requestType)) {
		response.sendError(401);//Session失效返回码,错误Msg是“Unauthorized”
		return false;
        }
        returntrue;
    }
}


AjaxError拦截错误信息

服务端401的代码对应的errorMsg是“Unauthorized”,ajaxError要注册到documnet中,这样对于该页面所有的ajax请求进行error拦截

$(document).ajaxError(function(e, jqXHR, options, errorMsg){
        //no login
        if(errorMsg == "Unauthorized") {
		top.location = "${ctx}";
		alert('\u672A\u767B\u5F55\u6216\u767B\u5F55\u8D85\u65F6\u3002\u8BF7\u91CD\u65B0\u767B\u5F55\uFF0C\u8C22\u8C22\uFF01');
        }
    });


Ajax异步请求

这是一个Ajax请求例子,这个Ajax请求如果服务端Session失效设置response.sendError(401),则将执行ajaxError函数

$.ajax({
       type:"POST",
       url: url,
       data: jsonData,
       dataType : "json",
       success:function(fileDesc){
       }
 });


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值