在web系統中,身份校驗是常用的方式。登錄頁面,是爲用戶提供登錄的入口。但是,有的時候,我們使用ajax操作的時候,由於得不到正確的數據信息,而使頁面停留不能跳轉到登錄頁面。其實,http協議的請求頭可以幫我們輕鬆解決這個問題。
在JavaEE的規範中,攔截器,是我們對資源請求的一種過濾方式,而對於安全頁面的身份校驗,我們也採用了這樣的方式。通常情況下,我們在攔截器中,獲取匿名用戶要請求的頁面是需要身份校驗,那麼我們需要跳轉到登錄頁面,提示用戶輸入用戶信息。
但是,由於ajax採用異步加載數據信息,獲取的爲text、json、xml等格式數據。這個時候,當我從服務器響應到客戶端的如果是登錄頁面。ajax是無法正確解析這個頁面信息,於是就會出現如下現象:
1. 在彈出層中加載出登錄頁面
2. 無法識別json、xml數據(html不是數據信息)
其實,在攔截器中,我們可以通過HttpServletRequest對象,讀取Header信息就可以區分,當前請求是ajax還是普通請求。基於jquery的ajax,在請求頭中有如下配置:
X-Requested-With:XMLHttpRequest
那麼,我們可以通過
request.getHeader("X-Requested-With");
當我們判斷是ajax請求的時候,我們響應到客戶端的信息就做一下處理。告訴ajax,你需要跳轉登錄頁面。
當然,到現在,我們的工作並沒有結束,我們還需要設置一下$.ajaxSetup(),具體配置如下:
$.ajaxSetup({
timeout: 3000, // 超時時間
error: function(xhr, status, msg) {
// 這裏可以從xhr中讀取,服務器響應回來的數據信息
}
});
通過ajaxSetup可以在全局設置jquery的ajax屬性,避免,每一個ajax單獨配置。