前後端分離 ajax請求後台重新導向

來源:互聯網
上載者:User

最近在做的一個前後端分離的一個項目,這就涉及到登入驗證的問題。我用的是token加上filter。
1,前端請求登入的時候,用使用者名稱和加上目前時間產生一個token,存入redis,然後返回給前端。
2,以後每次請求前端帶上token,在filter裡做驗證。
3,判斷token是否有效,有效則允許存取,無效則重新導向到登入頁面。
這就存在一個問題,ajax請求返回的json資料或者html.預設的是局部重新整理頁面。sendRedirect(“XXX”)重新導向無效。
解決辦法是前後台配合。
在filter裡面加上如下
java
httpResponse.addHeader("REDIRECT", "REDIRECT");//告訴ajax這是重新導向
httpResponse.addHeader("CONTEXTPATH", tokenUrl);//重新導向地址

這時候回應標頭中就會出現如下兩行
然後前端代碼如下:

$.ajaxSetup({        complete : function(XMLHttpRequest, textStatus) {            // 通過XMLHttpRequest取得回應標頭,REDIRECT              var redirect = XMLHttpRequest.getResponseHeader("REDIRECT");//若HEADER中含有REDIRECT說明後端想重新導向            alert(redirect);        if (redirect == "REDIRECT") {              var win = window;                  while (win != win.top){                    win = win.top;                }              win.location.href= XMLHttpRequest.getResponseHeader("CONTEXTPATH");        }      }    });

ajaxSetup的使用方百度強調內容
網上大概也就是這些思路。但是還有一個坑,
XMLHttpRequest.getResponseHeader(“XXX”),通過CORS方式解決的ajax跨域,是擷取不到要求標頭的。getResponseHeader的值一直為空白。
要通過Access-Control-Expose-Headers來設定回應標頭的白名單。
httpResponse.addHeader(“Access-Control-Expose-Headers”, “REDIRECT,CONTEXTPATH”);將想要傳遞的欄位設定一下。才能擷取到值。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.