zoukankan      html  css  js  c++  java
  • spring security:ajax请求的session超时处理

    原文:https://www.cnblogs.com/yanduanduan/p/6252203.html

    当前端在用ajax请求时,如果没有设置session超时时间并且做跳转到登录界面的处理,那么只是靠后台是很难完成超时的一系列动作的;但是如果后台

    没有封装一个ajax请求公共类,那么在ajax请求上下功夫解决session超时的问题是不行的,只有考虑在后台或者前台通过全局来进行对ajax请求超时的

    处理了。

     本人用的是spring security来处理的,想只通过后台来进行处理,但是尝试了很多种办法,但是一直没有成功,session一超时,前台页面就一直显示遮

    罩层,只有在刷新后才能正常操作。最终还是考虑在前台上下功夫,通过使用jquery的全局事件,就搞定了。

    1.在spring-security.xml配置session超时时触发的方法(配置在<security:http>标签内)

    <security:http>

    <security:session-management invalid-session-url="/timeout"></security:session-management>

    </security:http>

    2.超时处理方法代码

    @RequestMapping(value = "/timeout")
        public void sessionTimeout(HttpServletRequest request,HttpServletResponse response) throws IOException {  
            if (request.getHeader("x-requested-with") != null  
                    && request.getHeader("x-requested-with").equalsIgnoreCase(  
                            "XMLHttpRequest")) { // ajax 超时处理  
                response.getWriter().print("timeout");  //设置超时标识
                response.getWriter().close();
            } else {
                 response.sendRedirect("/login");  
            }
        }  

    3.前台监听超时方法

    $(document).ajaxComplete(function(event,obj,settings){
            if (obj.responseText == 'timeout') { //超时标识
                location.href='/login'; //跳转到登录页面
            }
        })

    这里使用jquery的全局事件,通过 ajaxComplete() 方法规定的函数会在请求完成时运行,即使请求并未成功

    或者至二级修改全局ajax的Complete方法

    $(document).ajaxComplete(function(event,obj,settings){
    alert(obj.status);
    })

  • 相关阅读:
    ●BZOJ 2752 [HAOI2012]高速公路(road)
    ●UVA 11021 tunnello
    ●POJ 2794 Double Patience
    【51Nod1555】布丁怪
    【LG1600】[NOIP2016]天天爱跑步
    【LG5171】Earthquake
    【LG4437】[HNOI/AHOI2018]排列
    【CF1097F】Alex and a TV Show
    【51Nod 1769】Clarke and math2
    【LG5330】[SNOI2019]数论
  • 原文地址:https://www.cnblogs.com/shihaiming/p/9406013.html
Copyright © 2011-2022 走看看