spring security:ajax請求的session超時處理

當前端在用ajax請求時,若是沒有設置session超時時間而且作跳轉到登陸界面的處理,那麼只是靠後臺是很難完成超時的一系列動做的;可是若是後臺前端

沒有封裝一個ajax請求公共類,那麼在ajax請求上下功夫解決session超時的問題是不行的,只有考慮在後臺或者前臺經過全局來進行對ajax請求超時的jquery

處理了。ajax

 本人用的是spring security來處理的,想只經過後臺來進行處理,可是嘗試了不少種辦法,可是一直沒有成功,session一超時,前臺頁面就一直顯示遮spring

罩層,只有在刷新後才能正常操做。最終仍是考慮在前臺上下功夫,經過使用jquery的全局事件,就搞定了。session

 

1.在spring-security.xml配置session超時時觸發的方法(配置在<security:http>標籤內)app

<security:http>函數

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

</security:http>spa

2.超時處理方法代碼.net

@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() 方法規定的函數會在請求完成時運行,即便請求並未成功

相關文章
相關標籤/搜索