登录超时开发总结

总结一下设计开发session登录超时的问题。

用到过滤器和ajaxSetup 技术

过滤器中doFilter方法

@Override

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,

            ServletException {

        HttpServletRequest request = (HttpServletRequest) req;

        HttpServletResponse response = (HttpServletResponse) res;

        String reqUrl = request.getRequestURI();//获取当前请求资源路径

             //这里的判断是因为我对这两个路径的请求判断是否超时

            if (reqUrl.startsWith("/clinic/") || reqUrl.startsWith("/diag/")) {

                if (request.getHeader("x-requested-with") != null

                        && request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {//判断是否是ajax请求

                    String userId = Utility.getLoginUserId();//获取当前session中的user是否存在

                    if (userId == null) {//登录超时user为空

                        response.setHeader("sessionstatus", "timeout");//定义1个头部信息便于判断

                        response.setHeader("url", "/Portal.jsp");//要跳转的登录页面

                    }

                }

            }

        //如果为空证明没有登录超时继续下一个操作 不为空不继续执行 

        //如果不加此判断你这个ajax请求会继续操作数据库

        if (response.getHeader("sessionstatus") == null) {

            chain.doFilter(req, res);

        }

    }


js代码 我放在了通用的jquery.min.js里了

$.xhrPool = [];//ajax请求集合
$.xhrPool.abortAll = function() {//用于结束页面其他ajax请求
    $(this).each(function(idx, jqXHR) {
        jqXHR.abort();
    });
    $.xhrPool = [];
}; 

$.ajaxSetup({ //官方定义(为以后要用到的Ajax请求设置默认的值)
            contentType:"application/x-www-form-urlencoded;charset=utf-8", 
            error: function (XMLHttpRequest, textStatus, errorThrown){ 
                if(XMLHttpRequest.status==403){ 
                alert('您没有权限访问此资源或进行此操作'); 
                return false; 
                } 
            },beforeSend: function(jqXHR) {//开始前
                $.xhrPool.push(jqXHR);      //添加到ajax到集合里          
            },complete:function(XMLHttpRequest,textStatus){   //这里进行判断是否超时
            var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus, 
            var url=XMLHttpRequest.getResponseHeader("url"); //获取登录页面
                if(sessionstatus == 'timeout'){  
                        $.xhrPool.abortAll(); //结束其他的ajax请求 否则可能造成多次提示超时
                         alert('登录超时, 请重新登录.');
                        window.location.href=url; //跳转到登陆页面   
             }   
       });

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值