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