ajax請求時session已過期處理方案


web系統中常常使用攔截器或過濾器實現權限攔截,判斷用戶是否登陸,若未登陸,跳轉到登陸頁,但當瀏覽器發的是ajax請求時,瀏覽器不會正常跳轉,而是返回登陸頁的HTML源碼給ajax回調函數(當跳轉的登陸頁跨域時,會出現302錯誤),解決方案如下:
 
前端:
//如果session超時或未登陸,則跳轉到登陸頁
 $(document).ajaxComplete(function(event,request, settings){
  var data=request.responseJSON;
  if(data.ret!=null&&data.ret==302)//根據服務器端返回的數據判斷
  {
           window.location=data.redirectUrl;
  }
 });

 

服務器:
 
@RequestMapping(value = "/nologin")
 public void login(HttpServletRequest request,HttpServletResponse response, Model model) throws Exception {
  if(request.getHeader("X-Requested-With")!=null&&request.getHeader("X-Requested-With").equals("XMLHttpRequest"))
  {
   response.getWriter().write({"ret":302,"msg": "  ","redirectUrl":“”}");
  }else {
   response.sendRedirect(applicationProps.getProperty("oauth.ucenter.url"));
  }
 }

 

服務端根據請求頭X-Requested-With是否有值且是否是XMLHttpRequest(表示ajax請求)來判斷是否是ajax請求,如果是則返回json數據,若不是則正常跳轉;
 
前端為ajax請求添加的全局的Complete方法,ajax請求完成時觸發(不管請求是否成功),其中 var data=request.responseJSON;是獲取服務器返回的Jason數據,根據json數據完成跳轉。


免責聲明!

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



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