開發使用的是SpringBoot和Shiro,然后遇到了這個問題,記錄一哈。
1.處理ajax異步請求:
如果不想每個ajax都判斷返回數據,然后進行未登錄跳轉的話,可以修改JQuery的默認設置(complete回調):
$.ajaxSetup({ contentType : "application/x-www-form-urlencoded;charset=utf-8", complete : function(XMLHttpRequest, textStatus) { var sessionstatus = XMLHttpRequest.getResponseHeader("sessionstatus"); if (sessionstatus == "timeout") { alert("登錄超時,請重新登錄!"); top.location.href="/"; } if(XMLHttpRequest.responseText == "{\"access\":\"Not Authenticated\"}"){ alert("尚未登錄,請重新登錄!"); top.location.href="/"; } } });
上面處理了超時和主動退出的情況,后者是需要后端傳對應的數據的,如果不想每個請求都判斷是否登錄然后響應未登錄數據的話,可以在過濾器里統一處理。我用了Shiro所以是在Shiro的基礎上添加攔截器,這里遇到一個小問題就是重寫的攔截器因為沒給Spring管理所以不能自動注入Dao層的接口,要通過應用上下文對象獲取。
2.處理非ajax請求
如果是主頁面的請求那么直接跳轉或轉發,子頁面的話可以發一段js來跳轉主頁面,比如
out.write("<sciprt>top.location.href='/';</script>");