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

weixin_33941350發表於2018-08-02

原文: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);
})

 

相關文章