跨域請求設置withCredentials

  最近在作運動城項目,這一個項目下面有多個子項目,如主數據項目,pos項目等。主數據項目的域名爲www.topmall.com,POS項目的域名爲pos.topmall.com。即兩個項目的主域名相同,子域名不相同。javascript

  咱們的登錄認證是放在主數據項目的,即進入POS項目若是檢測未登錄,是先要調用主數據的一個登錄接口登錄後才能夠訪問的。這時候跨域問題就出現了,進入POS項目以後跳出登錄框,輸入用戶名密碼請求主數據的http://www.topmall.com/signin進行登錄,看到返回的response裏面也有Set-cookie,可是再次請求POS項目的http://pos.topmall.com/pos/cashier/info 資源時卻報錯了。調試進去看發現後臺獲取不到當前登錄的用戶,查看請求頭髮現並無把登錄時返回的cookies設置到第二次請求的頭裏面。java

  查詢資料才知道登錄請求的主數據項目與POS項目不屬於同一個子域,即存在跨域,跨域請求想要帶上cookies必須在請求頭裏面加上{crossDomain: true, xhrFields: {withCredentials: true}}設置,因而在index界面加上了以下代碼:ajax

        <script>
            $(function () {  //, headers: { 'x-requested-with': 'XMLHttpRequest' }
                $.ajaxSetup({crossDomain: true, xhrFields: {withCredentials: true}});
            });
        </script>

  而後在後臺代碼返回response時作以下處理:跨域

private boolean recharge(HttpServletRequest request, HttpServletResponse response) throws Exception {
		String url = request.getHeader("Origin");
		logger.debug("Access-Control-Allow-Origin:" + url);
		if (!StringUtils.isEmpty(url)) {
			String val = response.getHeader("Access-Control-Allow-Origin");
			if (StringUtils.isEmpty(val)) {
				response.addHeader("Access-Control-Allow-Origin", url);
				response.addHeader("Access-Control-Allow-Credentials", "true");
			}
		}
		return true;
	}

  

再次訪問,發現請求頭已經能夠攜帶cookies。cookie

相關文章
相關標籤/搜索