diff --git a/src/main/java/geoinfo/main/api/ApiController.java b/src/main/java/geoinfo/main/api/ApiController.java index 87bf2c5d..53a3fe16 100644 --- a/src/main/java/geoinfo/main/api/ApiController.java +++ b/src/main/java/geoinfo/main/api/ApiController.java @@ -45,23 +45,42 @@ public class ApiController { @RequestMapping(value = "createApiKey.do") @ResponseBody - public Map UserApiInfo(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) { + public Map UserApiInfo(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { Map resultMap = new HashMap<>(); - - strUtil sUtil = new strUtil(); String userType = sUtil.checkNull(parseData.parseData((String)params.get("userType"))); - String apiKey = KeyGenerator.generateUniqueKey(); - System.out.println("Generated apiKey ==>" + apiKey); - log.info("apiKey ==> " + apiKey); - log.info("userType ==> " + userType); - - resultMap.put("code", "SUCCESS"); - resultMap.put("msg", "API 신청이 완료됐습니다."); - resultMap.put("data",apiKey); + String loginUserId = String.valueOf(request.getSession().getAttribute("USERID")); + params.put("userid", loginUserId); + params.put("userType", userType); + + apiService.addApiKey(params); +// + resultMap.put("code", params.get("p_result_code")); + resultMap.put("msg", params.get("p_err_msg")); + resultMap.put("data",params.get("apiKey")); return resultMap; } + + @RequestMapping(value = "discardApiKey.do") + @ResponseBody + public Map discardApiKey(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { + Map resultMap = new HashMap<>(); + strUtil sUtil = new strUtil(); + String apiSeq = sUtil.checkNull(parseData.parseData((String)params.get("apiSeq"))); + + String loginUserId = String.valueOf(request.getSession().getAttribute("USERID")); + params.put("userid", loginUserId); + params.put("apiSeq", apiSeq); + + resultMap = apiService.deleteWebApiKey(params); +// +// resultMap.put("code", params.get("p_result_code")); +// resultMap.put("msg", params.get("p_err_msg")); +// resultMap.put("data",params.get("apiKey")); + return resultMap; + } + } diff --git a/src/main/java/geoinfo/main/api/service/ApiMapper.java b/src/main/java/geoinfo/main/api/service/ApiMapper.java index bacb42d7..968392cf 100644 --- a/src/main/java/geoinfo/main/api/service/ApiMapper.java +++ b/src/main/java/geoinfo/main/api/service/ApiMapper.java @@ -1,5 +1,6 @@ package geoinfo.main.api.service; +import java.sql.SQLException; import java.util.HashMap; import java.util.List; @@ -14,4 +15,8 @@ public interface ApiMapper { public List selectInfoList(HashMap params) throws Exception; HashMap selectUserLatestKey(HashMap params) throws Exception; + + public HashMap spAddWebApiKey(HashMap params) throws SQLException; + + int deleteWebApiKey(HashMap params) throws Exception; } diff --git a/src/main/java/geoinfo/main/api/service/ApiService.java b/src/main/java/geoinfo/main/api/service/ApiService.java index fa3c8508..dcbe70d0 100644 --- a/src/main/java/geoinfo/main/api/service/ApiService.java +++ b/src/main/java/geoinfo/main/api/service/ApiService.java @@ -12,4 +12,8 @@ public interface ApiService { List selectInfoList(HashMap params) throws Exception; HashMap selectUserLatestKey(HashMap params) throws Exception; + + HashMap addApiKey(HashMap params) throws Exception; + + HashMap deleteWebApiKey(HashMap params) throws Exception; } diff --git a/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java b/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java index 294e54e0..2078a401 100644 --- a/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java +++ b/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java @@ -10,25 +10,89 @@ import org.springframework.stereotype.Service; import egovframework.rte.psl.dataaccess.util.EgovMap; import geoinfo.main.api.service.ApiMapper; import geoinfo.main.api.service.ApiService; +import geoinfo.util.KeyGenerator; @Service("apiService") public class ApiServiceImpl implements ApiService{ @Resource(name="ApiMapper") - private ApiMapper ApiMapper; + private ApiMapper apiMapper; @Override public int selectInfoListCnt(HashMap params) throws Exception { - return ApiMapper.selectInfoListCnt(params); + return apiMapper.selectInfoListCnt(params); } @Override public List selectInfoList(HashMap params) throws Exception { - return ApiMapper.selectInfoList(params); + return apiMapper.selectInfoList(params); } @Override public HashMap selectUserLatestKey(HashMap params) throws Exception { - return ApiMapper.selectUserLatestKey(params); + return apiMapper.selectUserLatestKey(params); } + + @Override + public HashMap addApiKey(HashMap params) throws Exception { + + String retCode = ""; + String retMsg = ""; + final int MAX_RETRY = 10; + + for (int i = 0; i < MAX_RETRY; i++) { + // 1. 새 키 생성 + String apiKey = KeyGenerator.generateUniqueKey(); + params.put("apiKey", apiKey); + + // 2. SP 호출 + apiMapper.spAddWebApiKey(params); + retCode = (String) params.get("p_result_code"); + retMsg = (String) params.get("p_err_msg"); + + // 3. 중복(61)이면 새로 생성해서 다시 시도 + if ("61".equals(retCode)) { + System.out.println("중복된 키 감지(" + apiKey + "), 재시도 중...(" + (i + 1) + ")"); + continue; + } + + // 4. 중복이 아니면 루프 탈출 + break; + } + + // 5. 결과에 따라 처리 (switch → if) + if ("100".equals(retCode)) { + System.out.println("API Key 생성 성공"); + } else if ("62".equals(retCode)) { + System.out.println("관리자 승인 대기: " + retMsg); + } else if ("63".equals(retCode)) { + System.out.println("유효기간 만료: " + retMsg); + } else if ("82".equals(retCode)) { + System.out.println("사용자 불가: " + retMsg); + } else if ("61".equals(retCode)) { + System.out.println("API Key 생성 실패: 중복으로 인해 " + MAX_RETRY + "회 시도 후 중단됨"); + } else { + System.out.println("기타 코드: " + retCode + " (" + retMsg + ")"); + } + + return params; + } + + @Override + public HashMap deleteWebApiKey(HashMap params) throws Exception { + HashMap result = new HashMap(); + int resultCnt = 0; + + resultCnt = apiMapper.deleteWebApiKey(params); + + if (resultCnt > 0) { + result.put("code", "SUCCESS"); + } else { + result.put("code", "ERROR"); + } + + return result; + } + + } diff --git a/src/main/java/geoinfo/main/login/LoginController.java b/src/main/java/geoinfo/main/login/LoginController.java index 9acaa0e9..3d6ca75a 100644 --- a/src/main/java/geoinfo/main/login/LoginController.java +++ b/src/main/java/geoinfo/main/login/LoginController.java @@ -806,7 +806,6 @@ public class LoginController { // 로그인 횟수 제한 : 10분설정시 1/(24*6) 5분설정시 1/(24*12) map.put("userid", userid); Map selectWebMemberIn = loginService.selectWebMemberIn(map); - cls = selectWebMemberIn.get("cls").toString(); boolean adminYn = false; diff --git a/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/Api_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/Api_SQL.xml index 86ba23f4..0f21d462 100644 --- a/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/Api_SQL.xml +++ b/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/Api_SQL.xml @@ -41,9 +41,26 @@ FROM (SELECT * FROM WEB_API_KEY WHERE USERID = #{userid} - AND END_DT >= SYSDATE +-- AND END_DT >= SYSDATE ORDER BY END_DT DESC) WHERE ROWNUM = 1 + + + + + + DELETE + FROM WEB_API_KEY + WHERE API_SEQ = #{apiSeq} + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp b/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp index 1411d896..1fad282e 100644 --- a/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp +++ b/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp @@ -8,25 +8,14 @@ - -<%--

API_SEQ: ${userLastApiKey.API_SEQ}

--%> -<%--

USERID: ${userLastApiKey.USERID}

--%> -<%--

USER_TYPE: ${userLastApiKey.USER_TYPE}

--%> -<%--

API_KEY: ${userLastApiKey.API_KEY}

--%> -<%--

START_DT:

--%> -<%--

END_DT:

--%> -<%--

APPROVE_YN: ${userLastApiKey.APPROVE_YN}

--%> - -
- - + - + @@ -38,7 +27,17 @@
신청일 만료일 승인상태 ${userLastApiKey.APPROVE_YN eq 'Y' ? '승인' : '미승인'}
+
+ + + + + +
+ 갱신 +
+
@@ -70,7 +69,37 @@ data : {userType: userType}, dataType :"json", success : function(res){ - alert("apiKey ==> " + res.data) +// alert("apiKey ==> " + res.data) + if (res.code == "100") { +// alert("신청이 완료됐습니다. \nAPI KEY는 " + res.data + "입니다.") + location.reload(); + } else { + alert(res.msg) + } + }, + error : function(){ + alert("오류입니다."); + } + }); + } + + /* [갱신] 버튼 클릭 + * 만료일이 지나면 KEY를 새로 발급 받을 수 있다. + */ + function discardApiKey() { + var apiSeq = '${userLastApiKey.API_SEQ}' + $.ajax({ + url : "/discardApiKey.do", + type : "post", + data : {apiSeq: apiSeq}, + dataType :"json", + success : function(res){ + if (res.code == "SUCCESS") { + alert("갱신을 위해 재신청하세요.") + location.reload(); + } else { + alert(res.msg) + } }, error : function(){ alert("오류입니다."); diff --git a/src/main/webapp/WEB-INF/views/home/include/left_menu.jsp b/src/main/webapp/WEB-INF/views/home/include/left_menu.jsp index 266c2312..3ed4e3f5 100644 --- a/src/main/webapp/WEB-INF/views/home/include/left_menu.jsp +++ b/src/main/webapp/WEB-INF/views/home/include/left_menu.jsp @@ -181,11 +181,15 @@ - + + + + + diff --git a/src/main/webapp/WEB-INF/views/home/include/top.jsp b/src/main/webapp/WEB-INF/views/home/include/top.jsp index e34ba04d..f390a89e 100644 --- a/src/main/webapp/WEB-INF/views/home/include/top.jsp +++ b/src/main/webapp/WEB-INF/views/home/include/top.jsp @@ -172,7 +172,11 @@ 시추정보 FAQ diff --git a/src/main/webapp/WEB-INF/views/home/main.jsp b/src/main/webapp/WEB-INF/views/home/main.jsp index 752d2ac3..737a55b7 100644 --- a/src/main/webapp/WEB-INF/views/home/main.jsp +++ b/src/main/webapp/WEB-INF/views/home/main.jsp @@ -367,24 +367,28 @@ - -

- API 신청 -
    -
  • 게시판
  • -
  • API 신청
  • -
-

- - + + + +

+ API 신청 +
    +
  • 게시판
  • +
  • API 신청
  • +
+

+ + +
+