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


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM