在H5 App中實現自定義Token的注意事項

咱們在寫Hybird App時,通常都是利用Token來代替Cookie實現用戶會話。前端

若是是發佈成app的話,因爲app自帶了webview環境,運行時與後端服務器的關係至關於Server 2 Server,所以通常不涉及跨域的問題。web

但若是發佈成H5 App的話,由於是直接在終端的瀏覽器裏運行,就會涉及到CORS(跨域資源共享)的處理問題。後端

關於CORS的解決辦法,主要就是三個方面:跨域

一、簡單請求:不涉及Header的附加信息,直接添加如下頭部響應便可:瀏覽器

response.setHeader("Access-Control-Allow-Origin", "*");            //容許的請求域名
response.setHeader("Access-Control-Allow-Methods", "POST, GET");    //容許的請求方式
response.setHeader("Access-Control-Allow-Headers", "*");        //容許的自定義頭
response.setHeader("Access-Control-Max-Age", "3600");            //信任時間

 

二、複雜請求:若是請求或者響應的Header中包含須要處理的額外信息時,則每次實際請求以前都會發送一次OPTIONS類型的預請求,若是預請求獲得正確的迴應,纔會發送正式請求,所以,須要服務端除了要添加上面的響應之外,還要對預請求進行處理:服務器

String method = getRequest().getMethod().toUpperCase();
if(method == "OPTIONS"){
    response.setStatus(HttpStatus.SC_NO_CONTENT);
}

 

三、發送Token:也是最重要的一點,若是須要經過Header向前端返回Token,那麼在發送響應以前,還須要額外添加一行許可:app

response.setHeader("Access-Control-Expose-Headers", "MyAppTokenName");
response.setHeader("MyAppTokenName", TokenUtil.getToken());

 

其中紅色的那行代碼很是重要,不然前端將沒法接收到response回來的Token串。spa

相關文章
相關標籤/搜索