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);
    })

  • 相关阅读:
    使用纯资源DLL文件实现多语言菜单、界面文字、Tooltips等[转]
    用VC++打造有多语言菜单的应用程序[转]
    VC2008以资源形式实现多语言版本[转]
    GetWindowRect与GetClientRect 的区别[转]
    MFC拆分窗口及它们之间的数据交换[转]
    【排序算法】(7)快速排序
    【排序算法】(4)归并排序
    【排序算法】(3)插入排序
    【排序算法】(8)希尔排序
    【排序算法】(2)冒泡排序
  • 原文地址:https://www.cnblogs.com/shihaiming/p/9406013.html
Copyright © 2011-2022 走看看