From 1be2f3dcfc03856e6bc16142b99717c09617057c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=80=EC=9D=B8?= Date: Thu, 6 Nov 2025 18:02:51 +0900 Subject: [PATCH 1/4] =?UTF-8?q?API=ED=82=A4=20=EC=8B=A0=EC=B2=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/geoinfo/main/api/ApiController.java | 21 ++++----- .../geoinfo/main/api/service/ApiMapper.java | 3 ++ .../geoinfo/main/api/service/ApiService.java | 2 + .../main/api/service/impl/ApiServiceImpl.java | 47 +++++++++++++++++++ .../sqlmap/mapper/api/geoinfo/Api_SQL.xml | 10 ++++ .../webapp/WEB-INF/views/body/api/apiKey.jsp | 8 +++- 6 files changed, 79 insertions(+), 12 deletions(-) diff --git a/src/main/java/geoinfo/main/api/ApiController.java b/src/main/java/geoinfo/main/api/ApiController.java index 87bf2c5d..86389812 100644 --- a/src/main/java/geoinfo/main/api/ApiController.java +++ b/src/main/java/geoinfo/main/api/ApiController.java @@ -45,21 +45,20 @@ 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; } diff --git a/src/main/java/geoinfo/main/api/service/ApiMapper.java b/src/main/java/geoinfo/main/api/service/ApiMapper.java index bacb42d7..df7e4c53 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,6 @@ public interface ApiMapper { public List selectInfoList(HashMap params) throws Exception; HashMap selectUserLatestKey(HashMap params) throws Exception; + + public HashMap spAddWebApiKey(HashMap params) throws SQLException; } diff --git a/src/main/java/geoinfo/main/api/service/ApiService.java b/src/main/java/geoinfo/main/api/service/ApiService.java index fa3c8508..7b0e99da 100644 --- a/src/main/java/geoinfo/main/api/service/ApiService.java +++ b/src/main/java/geoinfo/main/api/service/ApiService.java @@ -12,4 +12,6 @@ public interface ApiService { List selectInfoList(HashMap params) throws Exception; HashMap selectUserLatestKey(HashMap params) throws Exception; + + HashMap addApiKey(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..cb5330c3 100644 --- a/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java +++ b/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java @@ -10,6 +10,7 @@ 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{ @@ -31,4 +32,50 @@ public class ApiServiceImpl implements ApiService{ public HashMap selectUserLatestKey(HashMap params) throws Exception { return ApiMapper.selectUserLatestKey(params); } + + @Override + public HashMap addApiKey(HashMap params) throws Exception { + + HashMap rtnMap = null; + 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 호출 + rtnMap = 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; + } } 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..42196552 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 @@ -46,4 +46,14 @@ WHERE ROWNUM = 1 + + \ 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..15db1907 100644 --- a/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp +++ b/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp @@ -70,7 +70,13 @@ 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("오류입니다."); From f7a23c96e3871a9f9983b72d1d3668a5432f96ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=80=EC=9D=B8?= Date: Mon, 10 Nov 2025 10:57:20 +0900 Subject: [PATCH 2/4] =?UTF-8?q?=EB=A7=8C=EB=A3=8C=20API=20KEY=20=EA=B0=B1?= =?UTF-8?q?=EC=8B=A0=EC=B2=98=EB=A6=AC(=EC=82=AD=EC=A0=9C=20=ED=9B=84=20?= =?UTF-8?q?=EC=9E=AC=EC=8B=A0=EC=B2=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/geoinfo/main/api/ApiController.java | 20 ++++++++ .../geoinfo/main/api/service/ApiMapper.java | 2 + .../geoinfo/main/api/service/ApiService.java | 2 + .../main/api/service/impl/ApiServiceImpl.java | 29 ++++++++--- .../sqlmap/mapper/api/geoinfo/Api_SQL.xml | 9 +++- .../webapp/WEB-INF/views/body/api/apiKey.jsp | 49 ++++++++++++++----- 6 files changed, 91 insertions(+), 20 deletions(-) diff --git a/src/main/java/geoinfo/main/api/ApiController.java b/src/main/java/geoinfo/main/api/ApiController.java index 86389812..53a3fe16 100644 --- a/src/main/java/geoinfo/main/api/ApiController.java +++ b/src/main/java/geoinfo/main/api/ApiController.java @@ -63,4 +63,24 @@ public class ApiController { 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 df7e4c53..968392cf 100644 --- a/src/main/java/geoinfo/main/api/service/ApiMapper.java +++ b/src/main/java/geoinfo/main/api/service/ApiMapper.java @@ -17,4 +17,6 @@ public interface ApiMapper { 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 7b0e99da..dcbe70d0 100644 --- a/src/main/java/geoinfo/main/api/service/ApiService.java +++ b/src/main/java/geoinfo/main/api/service/ApiService.java @@ -14,4 +14,6 @@ public interface ApiService { 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 cb5330c3..2078a401 100644 --- a/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java +++ b/src/main/java/geoinfo/main/api/service/impl/ApiServiceImpl.java @@ -16,27 +16,26 @@ import geoinfo.util.KeyGenerator; 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 { - HashMap rtnMap = null; String retCode = ""; String retMsg = ""; final int MAX_RETRY = 10; @@ -47,7 +46,7 @@ public class ApiServiceImpl implements ApiService{ params.put("apiKey", apiKey); // 2. SP 호출 - rtnMap = ApiMapper.spAddWebApiKey(params); + apiMapper.spAddWebApiKey(params); retCode = (String) params.get("p_result_code"); retMsg = (String) params.get("p_err_msg"); @@ -78,4 +77,22 @@ public class ApiServiceImpl implements ApiService{ 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/resources/egovframework/sqlmap/mapper/api/geoinfo/Api_SQL.xml b/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/Api_SQL.xml index 42196552..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,7 +41,7 @@ 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 @@ -56,4 +56,11 @@ #{p_err_msg, mode=OUT, jdbcType=VARCHAR} ) } + + + + 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 15db1907..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' ? '승인' : '미승인'}
+
+ + + + + +
+ 갱신 +
+
@@ -83,5 +82,29 @@ } }); } + + /* [갱신] 버튼 클릭 + * 만료일이 지나면 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("오류입니다."); + } + }); + } From 9392a116d2f60e2f0f839396cf0d0e8e3a4a5a22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=80=EC=9D=B8?= Date: Mon, 10 Nov 2025 11:13:19 +0900 Subject: [PATCH 3/4] =?UTF-8?q?API=EC=8B=A0=EC=B2=AD=20=EB=A9=94=EB=89=B4?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EC=97=85=EC=82=AC=EC=9A=A9=EC=9E=90(cls?= =?UTF-8?q?=3D1)=EB=A7=8C=20=EB=B3=BC=20=EC=88=98=20=EC=9E=88=EC=9D=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WEB-INF/views/home/include/left_menu.jsp | 14 ++++--- .../webapp/WEB-INF/views/home/include/top.jsp | 6 ++- src/main/webapp/WEB-INF/views/home/main.jsp | 40 ++++++++++--------- 3 files changed, 36 insertions(+), 24 deletions(-) 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 신청
  • +
+

+ + +
+
From dc1074efc9a44633fb7d50c11d44ffc76d28d401 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A0=EC=A7=80=EC=9D=B8?= Date: Mon, 10 Nov 2025 14:33:21 +0900 Subject: [PATCH 4/4] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=90?= =?UTF-8?q?=EB=9F=AC=20*ID/PW=20=ED=8B=80=EB=A0=B8=EC=9D=84=EB=95=8C=20?= =?UTF-8?q?=ED=9D=B0=20=ED=99=94=EB=A9=B4=EC=9D=B4=20=EB=82=98=EC=98=B4=20?= =?UTF-8?q?*=EA=B0=9C=EC=9D=B8/=EA=B8=B0=EC=97=85=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EA=B5=AC=EB=B6=84=20=EC=B2=98=EB=A6=AC=20=EB=88=84?= =?UTF-8?q?=EB=9D=BD=EB=90=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/geoinfo/main/login/LoginController.java | 1 - 1 file changed, 1 deletion(-) 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;