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