【java介面開發】---與Android對接註冊介面的session會話保持問題
阿新 • • 發佈:2019-02-14
技術渣,遇到問題記錄一下,好記性不如爛筆頭嘛(應該是好記性不如寫部落格~~~~~~)
【問題】
在java後臺寫了獲取驗證碼和註冊的兩個介面,提供給ios和Android呼叫。ios測試註冊過程中都是一條過,但是Android就出現了很尷尬的問題【第一次請求傳送驗證碼後,java把驗證碼存入session後,再請求註冊介面中我取不到了放入session中的驗證碼了,很難受,技術渣也不知道咋回事,Android說我的問題,我說是Android的問題~~~~~~~~~~~~~~~】好了說一下解決辦法。
【分析】
第二次取不到session中的驗證碼的原因是與Android跨域請求時出現sessionid不是同一個的問題
【解決方法】
在Android第一次請求獲取驗證碼介面時把sessionid返回給Android,讓Android在請求註冊介面時在請求頭上加上這個sessionid就大吉大利今晚吃雞了~~~~~~~~~~~
【上程式碼】
獲取驗證碼時返回sessionid
@RequestMapping(value = "AppGetCode") @ResponseBody public JsonResult<String> AppGetCode(HttpServletResponse response, HttpServletRequest request, String phone) { // 允許跨域請求 response.setHeader("Access-Control-Allow-Origin", "*"); //response.setHeader("Access-Control-Allow-Credentials","true"); if(phone!=null){ Client client=clientService.findUserByPhone(phone); /*判斷client是否為空,如果為空說明手機號沒有註冊,可以進行註冊*/ if(client==null){ String code=String.valueOf(Math.random()).substring(2,8); //傳送驗證碼,並將驗證碼存入session //傳送簡訊API Map<String, String> param = clnt.newParam(2); param.put(YunpianClient.MOBILE, phone); param.put(YunpianClient.TEXT, "【陸港雲】您的驗證碼是"+code+"。如非本人操作,請忽略本簡訊"); clnt.sms().single_send(param); /*>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<*/ HttpSession session=request.getSession(); String sessionId = session.getId(); session.setAttribute("code", code); //String code1=(String)session.getAttribute("code"); return new JsonResult<String>(0, "傳送驗證碼成功", sessionId); }else{ return new JsonResult<String>(1, "手機號被佔用", null); }} else{ return new JsonResult<String>(0, "手機號不能為空", null); } }
Android在請求時加上請求頭資訊
OkHttpUtils.post() .url(ServerConfig.REMOTE_BASE_URL + ServerConfig.REGISTER_URL) .addHeader("Cookie", "JSESSIONID=" + sessionId) .addParams("account", account) .addParams("phoneCode", phoneCode) .addParams("password", password) .build() .execute(new StringCallback() {
好了 劇終了~~~~~~~~~~~(新手上路,有不足的地方還望大佬們指點迷津一下)
參考大佬部落格: