Prechádzať zdrojové kódy

1. 로그 범위 수정 (중요하지 않은 로그는 debug로 조정)
2. 버그수정
토큰 갱신 과정 수정

pangs 6 rokov pred
rodič
commit
a0828d6cda

+ 1 - 0
src/main/java/com/icontrols/kakao/common/SERVERINFO.java

@@ -21,6 +21,7 @@ public class SERVERINFO {
 	
 	public static final String SendDevEventURL = "http://localhost"; // 중계서버로 변경해야함.
 	public static final String SendKakaoEventURL = "https://teldev.hdc-smart.com"; // 중계서버로 변경해야함.
+//	public static final String SendKakaoEventURL = "https://kakaohome-api.i.kakao.com"; // 중계서버로 변경해야함.
 	
 	public static String SendEventURL = "https://hdc-smart.com";
 

+ 1 - 1
src/main/java/com/icontrols/kakao/common/THINGS_INFO.java

@@ -91,8 +91,8 @@ public final class THINGS_INFO {
 		public void setDisplayName(String displayName) {
 			this.displayName = displayName;
 		}
-		
 	}
+	
 	public enum THINGS{
 		//endpoint는 카카오 API와 연동될 기기 endpoint
 		// name 은 우리쪽에서 정의된 기기 명

+ 1 - 0
src/main/java/com/icontrols/kakao/config/DanziTokenInterceptor.java

@@ -17,6 +17,7 @@ public class DanziTokenInterceptor implements HandlerInterceptor {
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
 			throws Exception {
+		logger.info("***");
 		logger.info("[Interceptor preHandle] - " + request.getHeader(HEADER_AUTH));
 		
 		

+ 1 - 1
src/main/java/com/icontrols/kakao/controller/AuthController.java

@@ -30,7 +30,7 @@ public class AuthController {
 	
 	@RequestMapping(value = "/kakao/auth", method = RequestMethod.POST, consumes = "application/json")
 	public @ResponseBody Map<String, Object> reqCode(@RequestBody Map<String, Object> body) throws Exception {
-		logger.info(body.toString());
+		logger.info("[AUTH] - "+body.toString());
 		Map<String, Object> retMap = authService.authProcess(body);
 		
 		return retMap;

+ 1 - 2
src/main/java/com/icontrols/kakao/controller/KakaoDanziController.java

@@ -114,14 +114,13 @@ public class KakaoDanziController {
 					return params;
 				}else {
 					String authorization =  request.getHeader(SERVERINFO.HEADER_AUTH);
-					logger.info(authorization);
+					logger.info("[Authorization] - "+authorization);
 					int validation_auth = CommonUtil.validateHeaderAuth(authorization);
 					if(validation_auth != KAKAO_RESULT.SUCCESS) {
 						params.put(KEY_INFO.HTTP_KEY_ERROR, KAKAO_RESULT.getErrorInfo(KAKAO_RESULT.FAIL_INVALID_CLIENT));
 						return params;
 					}
 				}
-				
 				// 카카오 홈과 유저의 인증 완료시 카카오에서 전송해주는 API TYPE
 				// 건내받은 토큰 정보를 DB에 저장해야 한다.
 				retMap = kakaoService.request_grantAuthorization(params);

+ 1 - 1
src/main/java/com/icontrols/kakao/controller/MainController.java

@@ -118,7 +118,7 @@ public class MainController {
 		return retMap;
 	}
 	
-	@RequestMapping(value = "/events/token", method = RequestMethod.POST)
+	@RequestMapping(value = "/events/token", method = RequestMethod.POST, consumes = "application/x-www-form-urlencoded")
 	public @ResponseBody Map<String, Object> recieveEventsToken(@RequestHeader HttpHeaders header,
 														@RequestBody(required = false) String grant_type,
 														@RequestBody(required = false) String refresh_token) throws Exception {

+ 3 - 3
src/main/java/com/icontrols/kakao/service/impl/KakaoExtensionServiceImpl.java

@@ -125,7 +125,7 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		Map<String, Object> retMap = new HashMap<String, Object>();
 		
-		logger.info(allDeviceMap.toString());
+		logger.debug(allDeviceMap.toString());
 		try {
 			if(endpointIds == null) {
 				body.clear();
@@ -154,10 +154,10 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 				if(!allDeviceMap.containsKey(endpointId)) {
 					unreachableIds.add(endpointId);
 					state.put("power", "off");
-					logger.info("[" + endpointId + "] - unreachableId");
+					logger.debug("[" + endpointId + "] - unreachableId");
 				}else {
 					state = (Map<String, Object>)((Map<String, Object>)allDeviceMap.get(endpointId)).get("state");
-					logger.info("["+endpointId+"] - state = " + state );
+					logger.debug("["+endpointId+"] - state = " + state );
 				}
 				
 				retMap.put(endpointId, state);

+ 2 - 6
src/main/java/com/icontrols/kakao/socket/utils/iMapRequestSync.java

@@ -59,7 +59,7 @@ public class iMapRequestSync {
 
 	void iMAPClientLog(String msg) {
 		if (LogSW)
-			logger.info("iMAPClient :" + msg);
+			logger.debug("iMAPClient :" + msg);
 	}
 
 	public iMapRequestSync(String svrIP, int svrPORT) 
@@ -95,7 +95,7 @@ public class iMapRequestSync {
 	}
 
 	public boolean reqSocketCommunication(String XML, String SoIPa, int SoIPport, int TimeOut) {
-		logger.info("reqSocketCommunication");
+		logger.debug("reqSocketCommunication");
 		try {
 			cmdDoc = XML + "\r\n"; // 보낼 XML 메시지
 
@@ -155,7 +155,6 @@ public class iMapRequestSync {
 			}
 
 			if (i == SOCKET_WAIT_COUNT || succ == false) {
-
 				isock.close();
 				return false;
 			}
@@ -212,9 +211,6 @@ public class iMapRequestSync {
 		}
 	}
 
-	public void SetEncType() {
-
-	}
 
 	public int SetItem(String name) {
 		if (doc == null)

+ 63 - 41
src/main/java/com/icontrols/kakao/socket/wallpad/KakaoEventHandler.java

@@ -37,7 +37,6 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
-import com.icontrols.kakao.common.ERROR_INFO;
 import com.icontrols.kakao.common.KAKAO_RESULT;
 import com.icontrols.kakao.common.KEY_INFO;
 import com.icontrols.kakao.common.SERVERINFO;
@@ -78,16 +77,21 @@ public class KakaoEventHandler {
 			
 			int result = CommonUtil.compareStringTypeTime(currentTime, tokenExpiresTime);
 			
-			boolean connFlag = true;
+//			boolean connFlag = true;
 			// 현재 시간이 토큰 만료시간보다 크다면 토큰이 만료 됐다는 뜻.
 			// 카카오 이벤트 서버에서 토큰을 갱신 받은 뒤 이벤트를 전송해야 한다.
-			if(result < 1) 
-				 connFlag = sendKakaoTokenRefresh(donghoInfo);
+			if(result < 1) {
+				donghoInfo = sendKakaoTokenRefresh(donghoInfo);
+
+				if(donghoInfo == null) {
+					retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
+					retMap.put("message", "ID-["+donghoInfo.getId() + "]-Fail to Token Refresh");
+					return CompletableFuture.completedFuture(retMap);
+				}
 				
-			if(!connFlag) {
-				retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
-				retMap.put("message", "ID-["+donghoInfo.getId() + "]-Fail to Token Refresh");
-				return CompletableFuture.completedFuture(retMap);
+				logger.info("prev donghoInfo : " + donghoInfo.toString());
+				
+				params.put(KEY_INFO.HTTP_KEY_AUTHORIZATION, donghoInfo.getKakaoAccessToken());
 			}
 			
 			logger.info("["+donghoInfo.getKakaoAccessToken()+"] - 유효한 토큰");
@@ -112,25 +116,28 @@ public class KakaoEventHandler {
 			case KAKAO_RESULT.FAIL_EXPIREDTOKEN:  // 만료된 토큰, 토큰 재발급 뒤 재시도.
 				// 재시도 할때는 따로 결과를 받지 않을려고.. 성공할때까지 계속 시도하는것도 비효율적.
 				logger.info("["+donghoInfo.getKakaoAccessToken()+"]-인증토큰 만료 토큰 갱신 요청");
-				connFlag = sendKakaoTokenRefresh(donghoInfo);
+				DonghoInfo tmpDonghoInfo = sendKakaoTokenRefresh(donghoInfo);
 				
-				if(!connFlag) {
+				if(tmpDonghoInfo == null) {
 					retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
-					retMap.put("message", "ID-["+donghoInfo.getId() + "]-Fail to Token Refresh Retry");
+					retMap.put("message", "ID-["+tmpDonghoInfo.getId() + "]-Fail to Token Refresh Retry");
 					return CompletableFuture.completedFuture(retMap);
 				}
 				
-				logger.info("["+donghoInfo.getKakaoAccessToken()+"]-이벤트 재전송 시도");
-				sendResult = sendStatusResult(donghoInfo, params);
+				logger.info("["+tmpDonghoInfo.getKakaoAccessToken()+"]-이벤트 재전송 시도");
+				
+				params.put(KEY_INFO.HTTP_KEY_AUTHORIZATION, tmpDonghoInfo.getKakaoAccessToken());
+				
+				sendResult = sendStatusResult(tmpDonghoInfo, params);
 				
 				code = (int) sendResult.get("result");
 				
 				retMap.put("result", code);
 				
 				if(code != KAKAO_RESULT.SUCCESS) {
-					retMap.put("message", "ID-["+donghoInfo.getId() + "]-이벤트 재전송 실패 - [" + sendResult.get("message") + "]");
+					retMap.put("message", "ID-["+tmpDonghoInfo.getId() + "]-이벤트 재전송 실패 - [" + sendResult.get("message") + "]");
 				}else {
-					retMap.put("message", "ID-["+donghoInfo.getId() + "]-이벤트 재전송 성공");
+					retMap.put("message", "ID-["+tmpDonghoInfo.getId() + "]-이벤트 재전송 성공");
 				}
 				
 				break;
@@ -145,6 +152,8 @@ public class KakaoEventHandler {
 			retMap.put("result", KAKAO_RESULT.FAIL_INTERNAL);
 			
 			retMap.put("message", "ID-["+donghoInfo.getId() + "]-" + e.getMessage());
+			logger.error("ERROR" + e.getStackTrace());
+			e.printStackTrace();
 		}
 		
 		return CompletableFuture.completedFuture(retMap);
@@ -188,7 +197,7 @@ public class KakaoEventHandler {
 			// 제어기기 별로 상태 이벤트 구분하여 처리하도록 해야 한다
 			HttpEntity<Object> entity = new HttpEntity<Object>(params, headers);
 			
-			String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events":SERVERINFO.SendKakaoEventURL+":"+SERVERINFO.SendKakaoEventPort+ "/events";
+			String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events":SERVERINFO.SendKakaoEventURL + ":" + SERVERINFO.SendKakaoEventPort + "/events";
 
 			logger.info("SendStatusResult URL : " + url);
 			logger.info("SendStatusResult header : " + headers.toString());
@@ -233,7 +242,7 @@ public class KakaoEventHandler {
 	 * @param ho
 	 * @param params
 	 */
-	public boolean sendKakaoTokenRefresh(DonghoInfo donghoInfo){
+	public DonghoInfo sendKakaoTokenRefresh(DonghoInfo donghoInfo){
 		DonghoInfoRepository repo = (DonghoInfoRepository)BeanUtils.getBean("donghoInfoRepository");
 		
 		String refreshToken = donghoInfo.getKakaoRefreshToken();
@@ -246,17 +255,19 @@ public class KakaoEventHandler {
 		headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
 		headers.add("Authorization", "Basic " + encoding);
 		
-		MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>();
+		MultiValueMap<String, String> parameters = new LinkedMultiValueMap<String, String>();
 		parameters.add("grant_type", "refresh_token");
 		parameters.add("refresh_token", refreshToken);
 		
 		HttpEntity<MultiValueMap<String, String>> entity = new HttpEntity<>(parameters, headers);
 		
-		String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events/token":SERVERINFO.SendKakaoEventURL+":"+SERVERINFO.SendKakaoEventPort+ "/events/token";
+		String url = SERVERINFO.isDev?SERVERINFO.SendDevEventURL + ":" + SERVERINFO.SendDevEventPort + "/events/token":SERVERINFO.SendKakaoEventURL + ":" + SERVERINFO.SendKakaoEventPort +"/events/token";
+//		String url = "https://kakaohome-api.i.kakao.com/events/token";
 		
 		logger.info("[TOKEN REFRESH REQUEST] URL : " + url);
 		logger.info("[TOKEN REFRESH REQUEST] header : " + headers.toString());
 		logger.info("[TOKEN REFRESH REQUEST] return value : " + entity.toString());
+		logger.info("[TOKEN parameter] --" +parameters.toString());
 		URI uri = URI.create(url);
 		
 		CloseableHttpClient httpClient = HttpClients.custom().setSSLHostnameVerifier(new NoopHostnameVerifier()).build();
@@ -264,31 +275,42 @@ public class KakaoEventHandler {
 		
 		requestFactory.setHttpClient(httpClient);
 		requestFactory.setConnectTimeout(3000);
-		
-		RestTemplate restTemplate = new RestTemplate(requestFactory);
-		
-		String answer = restTemplate.postForObject(url, entity, String.class);
-		logger.debug("[TOKEN REFRESH REQUEST] = " + answer);
-		
-		Map<String, Object> retMap = CommonUtil.jsonToMap(answer);
-		
-		if(retMap.containsKey(KEY_INFO.HTTP_KEY_ACCESS_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_REFRESH_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_EXPIRES_IN)) {
-			donghoInfo.setKakaoAccessToken((String)retMap.get(KEY_INFO.HTTP_KEY_ACCESS_TOKEN));
-			donghoInfo.setKakaoRefreshToken((String)retMap.get(KEY_INFO.HTTP_KEY_REFRESH_TOKEN));
-			donghoInfo.setKakaoExpiresTime(Integer.toString((int)retMap.get(KEY_INFO.HTTP_KEY_EXPIRES_IN)));
-			
-			donghoInfo.setKakaoTokenCreateTime(CommonUtil.getStrTypeCurTime());
-			donghoInfo.setKakaoTokenExpireTime(CommonUtil.getStrTypeCurTimeAfterSec(Integer.parseInt(donghoInfo.getKakaoExpiresTime())));
+
+		String answer = "";
+		try {
+			RestTemplate restTemplate = new RestTemplate(requestFactory);
+			answer = restTemplate.postForObject(url, entity, String.class);
+			logger.info("[TOKEN REFRESH REQUEST] = " + answer);
 			
-			repo.save(donghoInfo);
+			Map<String, Object> retMap = CommonUtil.jsonToMap(answer);
 			
-			return true;
-		}else {
-			logger.error("****************************************************");
-			logger.error("토클 리프레시 실패");
-			logger.error("****************************************************");
+			if(retMap.containsKey(KEY_INFO.HTTP_KEY_ACCESS_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_REFRESH_TOKEN) && retMap.containsKey(KEY_INFO.HTTP_KEY_EXPIRES_IN)) {
+				donghoInfo.setKakaoAccessToken((String)retMap.get(KEY_INFO.HTTP_KEY_ACCESS_TOKEN));
+				donghoInfo.setKakaoRefreshToken((String)retMap.get(KEY_INFO.HTTP_KEY_REFRESH_TOKEN));
+				donghoInfo.setKakaoExpiresTime(Integer.toString((int)retMap.get(KEY_INFO.HTTP_KEY_EXPIRES_IN)));
+				
+				donghoInfo.setKakaoTokenCreateTime(CommonUtil.getStrTypeCurTime());
+				donghoInfo.setKakaoTokenExpireTime(CommonUtil.getStrTypeCurTimeAfterSec(Integer.parseInt(donghoInfo.getKakaoExpiresTime())));
+				
+				repo.save(donghoInfo);
+				
+				logger.info("****************************************************");
+				logger.info("토큰 리프레시 성공");
+				logger.info(donghoInfo.toString());
+				logger.info("****************************************************");
+				return donghoInfo;
+			}
+		}catch(Exception e) {
+			logger.error("[TOKEN REFRESH REQUEST ERROR] - " + e.getMessage());
 			
-			return false;
+			e.printStackTrace();
 		}
+		
+		
+		logger.error("****************************************************");
+		logger.error("토클 리프레시 실패");
+		logger.error("****************************************************");
+		
+		return null;
 	}
 }

+ 1 - 1
src/main/java/com/icontrols/kakao/socket/wallpad/KakaoMsgHandler.java

@@ -221,6 +221,7 @@ public class KakaoMsgHandler {
 		
 		return retMap;
 	}
+	
 	/**
 	 * 동 호 정보 EndpointID 로 월패드에 상태 조회 메세지를 전송하고 결과를 반환 받는다. 
 	 * @param dong
@@ -557,7 +558,6 @@ public class KakaoMsgHandler {
 			
 		}
 		
-		
 		logger.info("[---->>]" + sb.toString());
 		return sb.toString();
 	}