아이폰 iOS의 경우 OS차원에서 세션을 관리해주지만 Android의 경우는 자동으로 동기화 되지 않으므로 서버 호출시 개별적으로 대응을 해줘야 한다.
public class MainActivity extends CordovaActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.init(); super.appView.getSettings().setAppCacheEnabled(false); super.appView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); //super.appView.setVerticalScrollbarOverlay(true); super.appView.clearCache(true); super.appView.getSettings().setJavaScriptEnabled(true); super.appView.getSettings().setDomStorageEnabled(true); //super.appView.getSettings().setSaveFormData(false); //super.appView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); //super.appView.getSettings().setBuiltInZoomControls(true); //super.appView.getSettings().setSupportZoom(true); //super.appView.getSettings().setSavePassword(false); CookieSyncManager.createInstance(this); CookieManager cookieManager = CookieManager.getInstance(); CookieSyncManager.getInstance().startSync(); //cookieManager.setCookie("http://192.168.100.120:8280", "JSESSIONID=998822185E5713BE7188A163F33C5433"); String baseUrl = this.getString(R.string.SERVER_URL); new SessionCommTask().execute(cookieManager,baseUrl); // Set by <content src="index.html" /> in config.xml loadUrl(launchUrl); } public class SessionCommTask extends AsyncTask<Object, Integer, String> { CookieManager cookieManager; String baseUrl; @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Object... params) { cookieManager = (CookieManager)params[0]; baseUrl = (String)params[1]; int errorCode = ERROR_CODE_NOERROR; try { String addr = baseUrl+"/dvc/xml/deviceInfoList.do"; URL url = new URL(addr); Log.d(this.getClass().getSimpleName(),"addr : "+addr); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if( conn != null ) { Log.d(this.getClass().getSimpleName(),"http conn OK"); int resCode = conn.getResponseCode(); if( resCode == HttpURLConnection.HTTP_OK ) { String resultCookie = conn.getHeaderField("Set-Cookie"); Log.d(this.getClass().getSimpleName(),"main > resultCookie1 : "+resultCookie); if (resultCookie!=null) { String[] cookieItems = resultCookie.split(";"); //if (cookieItems.length>0) { for(String cookieItem : cookieItems) { //for(int i =0; i < cookieItems.length ; i++) { Log.d(this.getClass().getSimpleName(),"cookie Itme : "+cookieItem); cookieManager.setCookie(baseUrl, cookieItem); } //} } Log.d(this.getClass().getSimpleName(),"main > resultCookie2 : "+cookieManager.getCookie(baseUrl)); // DISCONNECT conn.disconnect(); } } else { Log.d(this.getClass().getSimpleName(),"http conn FAIL"); errorCode = ERROR_CODE_HTTP_ELSE; } } catch(Exception e) { e.printStackTrace(); errorCode = ERROR_CODE_HTTP_EXCEPTION; } return null; } protected void onProgressUpdate(Integer... progress) { Log.d(this.getClass().getSimpleName(),"onProgressUpdate:["+progress[0]+"]"); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); } @Override protected void onCancelled() { // TODO Auto-generated method stub super.onCancelled(); } }
@Override protected String doInBackground(Object... params) { action = (String)params[0]; url = (String)params[1]; data = (JSONArray)params[2]; callbackContext = (CallbackContext)params[3]; if (action.equals(HTTP_METHOD_GET)) { try { String uri = data.getString(0); JSONObject param = data.getJSONObject(2); Log.d(this.getClass().getSimpleName()," $$$$$ : "+uri); Log.d(this.getClass().getSimpleName()," $$$$$ : "+param.toString()); Log.d(this.getClass().getSimpleName()," $$$$$ : "+data.getString(1)); HttpHeaders requestHeaders = new HttpHeaders(); requestHeaders .setContentType(MediaType.APPLICATION_FORM_URLENCODED); if ("json".equals(data.getString(1))) { requestHeaders.setAccept(Collections .singletonList(MediaType.APPLICATION_JSON)); } else if ("xml".equals(data.getString(1))) { requestHeaders.setAccept(Collections .singletonList(MediaType.APPLICATION_XML)); List<Charset> charset = new ArrayList<Charset>(Charset .availableCharsets().values()); charset.add(Charset.forName("UTF-8")); requestHeaders.setAcceptCharset(charset); } else { callbackContext.error(ERROR_MESSAGE_PARAM); return null; } String cookies = cookieManager.getCookie(url); Log.d(this.getClass().getSimpleName(),"cookies > "+cookies); //requestHeaders.add("Cookie", "JSESSIONID=E7A4058A9BD6B26D8A9D5F869F1E24E4"); requestHeaders.add("Cookie", cookies); HttpEntity<String> requestEntity = new HttpEntity<String>("", requestHeaders); // Create a new RestTemplate instance RestTemplate restTemplate = new RestTemplate(); // Add the String message converter restTemplate.getMessageConverters().add( new StringHttpMessageConverter()); if (url == null) { url = ""; } if (uri == null) { uri = ""; } // Make the HTTP GET request, marshaling the response to a // String ResponseEntity<String> responseEntity = restTemplate.exchange( url + uri + "?" + parseParameter(param), HttpMethod.GET, requestEntity, String.class); String result = responseEntity.getBody(); Log.d(this.getClass().getSimpleName(),"cookies result > "+responseEntity.getHeaders()); callbackContext.success(result); } catch (RestClientException e) { callbackContext.error(e.getLocalizedMessage()); } catch (JSONException e) { callbackContext.error(ERROR_MESSAGE_JSON); } catch (Exception e) { callbackContext.error(ERROR_MESSAGE_IO); } ... 중략 ...
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**/*.do" /> <mvc:exclude-mapping path="/uat/uia/**" /> <mvc:exclude-mapping path="/index.do" /> <bean class="egovframework.com.cmm.interceptor.AuthenticInterceptor" /> </mvc:interceptor> </mvc:interceptors>
public class AuthenticInterceptor extends HandlerInterceptorAdapter { /** * 세션에 계정정보(LoginVO)가 있는지 여부로 인증 여부를 체크한다. * 계정정보(LoginVO)가 없다면, 로그인 페이지로 이동한다. */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { boolean isPermittedURL = false; HttpSession session = request.getSession(); System.out.println(">>>>> AuthenticInterceptor sessionID : "+session.getId()); System.out.println(">>>>> AuthenticInterceptor~~~~~"); /* LoginVO loginVO = (LoginVO) EgovUserDetailsHelper.getAuthenticatedUser(); loginVO.setId("OK"); if(loginVO != null){ return true; } else if(!isPermittedURL){ ModelAndView modelAndView = new ModelAndView("redirect:/dvc/logout.do"); throw new ModelAndViewDefiningException(modelAndView); } else { return true; } */ return true; } }