diff --git a/src/main/java/geoinfo/api/geoinfo/service/GeoinfoApiV1Mapper.java b/src/main/java/geoinfo/api/geoinfo/service/GeoinfoApiV1Mapper.java index e403339e..9fdd3a1c 100644 --- a/src/main/java/geoinfo/api/geoinfo/service/GeoinfoApiV1Mapper.java +++ b/src/main/java/geoinfo/api/geoinfo/service/GeoinfoApiV1Mapper.java @@ -30,6 +30,8 @@ public interface GeoinfoApiV1Mapper { // 프로젝트 정보 (Project Info) // ================================================================================================== + /** API ON/OFF 처리를 위한 활성상태 조회 처리 */ + public String selectApiActiveYn(String spNamep) throws SQLException; public ArrayList spGetTblProjectInfo(HashMap params) throws SQLException; public int spCntTblProjectInfo(HashMap params) throws SQLException; public ArrayList spGetSelectclassInfoP(HashMap params) throws SQLException; diff --git a/src/main/java/geoinfo/api/geoinfo/service/impl/GeoinfoApiV1ServiceImpl.java b/src/main/java/geoinfo/api/geoinfo/service/impl/GeoinfoApiV1ServiceImpl.java index 26a5765e..302ef3f7 100644 --- a/src/main/java/geoinfo/api/geoinfo/service/impl/GeoinfoApiV1ServiceImpl.java +++ b/src/main/java/geoinfo/api/geoinfo/service/impl/GeoinfoApiV1ServiceImpl.java @@ -36,6 +36,17 @@ public class GeoinfoApiV1ServiceImpl implements GeoinfoApiV1Service { //호출 프로시저 유효성 체크 spName = spName.trim(); + // API ACTIVE_YN 판별하여 'N'일 경우 일시중단상태. + String apiStatus = geoinfoApiV1Mapper.selectApiActiveYn(spName); + if (apiStatus != null && "N".equals(apiStatus)) { + // 성공 응답 기본값 설정 + jsonResponse.put("resultCode", 0); + jsonResponse.put("result", "true"); + jsonResponse.put("message", "DISABLE"); + + // 성공 코드 반환 + return 0; + } // 서비스 이름에 따라 분기 처리 if ("sp-get-tbl-project-info".equalsIgnoreCase(spName)) { diff --git a/src/main/java/geoinfo/main/api/ApiController.java b/src/main/java/geoinfo/main/api/ApiController.java new file mode 100644 index 00000000..722623b8 --- /dev/null +++ b/src/main/java/geoinfo/main/api/ApiController.java @@ -0,0 +1,58 @@ +package geoinfo.main.api; + +import java.util.HashMap; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.log4j.Logger; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.servlet.ModelAndView; + +import geoinfo.util.KeyGenerator; +import ictway.comm.util.parseData; +import ictway.comm.util.strUtil; + +@Controller +public class ApiController { + Logger log = Logger.getLogger(this.getClass()); + + /* + * 사용자 > API 신청 화면 + */ + @RequestMapping(value = "apiKey.do") + public ModelAndView goApiKeyPage(ModelAndView model, @RequestParam HashMap params) throws Exception { + + + + model.setViewName("body/api/apiKey"); + + return model; + } + + @RequestMapping(value = "createApiKey.do") + @ResponseBody + public Map UserApiInfo(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) { + 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); + + return resultMap; + } + +} diff --git a/src/main/java/geoinfo/main/main/MainController.java b/src/main/java/geoinfo/main/main/MainController.java index 70b59cd0..e04f2f28 100644 --- a/src/main/java/geoinfo/main/main/MainController.java +++ b/src/main/java/geoinfo/main/main/MainController.java @@ -372,6 +372,11 @@ public class MainController eGovUrl = "faq.do"; mv.setViewName("home/main.jsp?url=/body/board/main"); } + else if (url.equals("apiKey")) + { + eGovUrl = "apiKey.do"; + mv.setViewName("home/main.jsp?url=/body/board/main"); + } else if (url.equals("join")) { eGovUrl = "join.do"; diff --git a/src/main/java/geoinfo/regi/complete/service/impl/CompleteServiceImpl.java b/src/main/java/geoinfo/regi/complete/service/impl/CompleteServiceImpl.java index 7b070d2b..cc607a89 100644 --- a/src/main/java/geoinfo/regi/complete/service/impl/CompleteServiceImpl.java +++ b/src/main/java/geoinfo/regi/complete/service/impl/CompleteServiceImpl.java @@ -120,15 +120,16 @@ public class CompleteServiceImpl implements CompleteService { params.put("sortDir", sortDir); } - + int total = MyUtil.getIntegerFromObject(selectCompleteItemsCnt(params)).intValue(); Long pageSize = MyUtil.getLongFromObject( params.get("pageSize") ); if( pageSize == null ) { - pageSize = 10l; +// pageSize = 10l; + pageSize = (long) total; // 25.11.05(YJI) Kendo grid pager 'All' 처리 } PaginationInfo paginationInfo = new PaginationInfo(); - paginationInfo.setRecordCountPerPage(10); + paginationInfo.setRecordCountPerPage(pageSize.intValue()); paginationInfo.setPageSize(pageSize.intValue()); paginationInfo.setTotalRecordCount( MyUtil.getIntegerFromObject(selectCompleteItemsCnt(params)).intValue() ); diff --git a/src/main/java/geoinfo/regi/holeCoordinate/HoleCoordinateController.java b/src/main/java/geoinfo/regi/holeCoordinate/HoleCoordinateController.java index 9713b509..0b31935f 100644 --- a/src/main/java/geoinfo/regi/holeCoordinate/HoleCoordinateController.java +++ b/src/main/java/geoinfo/regi/holeCoordinate/HoleCoordinateController.java @@ -101,13 +101,15 @@ public class HoleCoordinateController { @RequestMapping("/getHoleCoordList.do") @ResponseBody public Map getHoleCoordList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { - - int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1; - int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : 10; // 기본값 10 + int nCls = MyUtil.getIntegerFromObject(request.getSession().getAttribute("CLS")); + strUtil sUtil = new strUtil(); + WebUtil wUtil = new WebUtil(); + wUtil.topTabId = "manageCoordinate"; // 검수일때 tab 활성화 시켜주기 위해 + String loginUserId = String.valueOf(request.getSession().getAttribute("USERID")); // 정렬 필드/방향 처리 - String sortField = (String) params.get("sort[0][field]"); - String sortDir = (String) params.get("sort[0][dir]"); + String sortField = sUtil.checkNull(parseData.parseData((String)params.get("sortField"))); + String sortDir = sUtil.checkNull(parseData.parseData((String)params.get("sortDir"))); // 기본 정렬 지정 (없을 경우) if (sortField == null || sortField.isEmpty()) sortField = "datetime"; @@ -117,11 +119,6 @@ public class HoleCoordinateController { params.put("sortField", sortField); params.put("sortDir", sortDir); - int nCls = MyUtil.getIntegerFromObject(request.getSession().getAttribute("CLS")); - strUtil sUtil = new strUtil(); - WebUtil wUtil = new WebUtil(); - wUtil.topTabId = "manageCoordinate"; // 검수일때 tab 활성화 시켜주기 위해 - String loginUserId = String.valueOf(request.getSession().getAttribute("USERID")); // request String srchStartDate = sUtil.checkNull(parseData.parseData((String)params.get("startDate"))); String srchEndDate = sUtil.checkNull(parseData.parseData((String)params.get("endDate"))); @@ -130,15 +127,14 @@ public class HoleCoordinateController { String searchCreateName = sUtil.checkNull(parseData.parseData((String)params.get("searchCreateName"))); params.put("loginUserId", loginUserId); params.put("cls", nCls); + + int total = masterService.getDataListCount(params); + int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1; + int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : total; // 기본값 10 params.put("startRow", ((page - 1) * pageSize) + 1); - if (page > 1) { - params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1 - } else { - params.put("endRow", 10); - } + params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1 List items = masterService.getDataListPaging(params); - int total = masterService.getDataListCount(params); Map result = new HashMap<>(); result.put("items", items); diff --git a/src/main/java/geoinfo/regi/listReg/ListRegController.java b/src/main/java/geoinfo/regi/listReg/ListRegController.java index 9c723860..3b90abc2 100644 --- a/src/main/java/geoinfo/regi/listReg/ListRegController.java +++ b/src/main/java/geoinfo/regi/listReg/ListRegController.java @@ -71,12 +71,9 @@ public class ListRegController { //request System.out.println("searchProjectName:"+request.getParameter("searchProjectName")); - int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1; - int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : 10; // 기본값 10 - // 정렬 필드/방향 처리 - String sortField = (String) params.get("sort[0][field]"); - String sortDir = (String) params.get("sort[0][dir]"); + String sortField = sUtil.checkNull(parseData.parseData((String)params.get("sortField"))); + String sortDir = sUtil.checkNull(parseData.parseData((String)params.get("sortDir"))); // 기본 정렬 지정 (없을 경우) if (sortField == null || sortField.isEmpty()) sortField = "datetime"; @@ -85,16 +82,15 @@ public class ListRegController { // MyBatis에 넣을 때는 깔끔하게 키 이름 정리 params.put("sortField", sortField); params.put("sortDir", sortDir); + + int total = masterService.getRegListCount(params); + int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1; + int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : total; // 기본값 10 params.put("startRow", ((page - 1) * pageSize) + 1); - if (page > 1) { - params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1 - } else { - params.put("endRow", 10); - } + params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1 //data정보 ArrayList result = masterService.getRegList(params); - int total = masterService.getRegListCount(params); HashMap resultMap = new HashMap(); resultMap.put("dataList1", result); diff --git a/src/main/java/geoinfo/regi/manageList/ManageListController.java b/src/main/java/geoinfo/regi/manageList/ManageListController.java index 60307bbc..cf8d4763 100644 --- a/src/main/java/geoinfo/regi/manageList/ManageListController.java +++ b/src/main/java/geoinfo/regi/manageList/ManageListController.java @@ -113,12 +113,12 @@ public class ManageListController { @ResponseBody public Map getManageList(HttpServletRequest request, HttpServletResponse response, @RequestParam HashMap params) throws Exception { - int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1; - int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : 10; // 기본값 10 - + int nCls = MyUtil.getIntegerFromObject(request.getSession().getAttribute("CLS")); + strUtil sUtil = new strUtil(); + WebUtil wUtil = new WebUtil(); // 정렬 필드/방향 처리 - String sortField = (String) params.get("sort[0][field]"); - String sortDir = (String) params.get("sort[0][dir]"); + String sortField = sUtil.checkNull(parseData.parseData((String)params.get("sortField"))); + String sortDir = sUtil.checkNull(parseData.parseData((String)params.get("sortDir"))); // 기본 정렬 지정 (없을 경우) if (sortField == null || sortField.isEmpty()) sortField = "datetime"; @@ -128,9 +128,6 @@ public class ManageListController { params.put("sortField", sortField); params.put("sortDir", sortDir); - int nCls = MyUtil.getIntegerFromObject(request.getSession().getAttribute("CLS")); - strUtil sUtil = new strUtil(); - WebUtil wUtil = new WebUtil(); wUtil.topTabId = "manageCoordinate"; // 검수일때 tab 활성화 시켜주기 위해 String loginUserId = String.valueOf(request.getSession().getAttribute("USERID")); // requestString srchReportType = sUtil.checkNull(parseData.parseData((String)params.get("searchReportType"))); @@ -142,15 +139,14 @@ public class ManageListController { params.put("loginUserId", loginUserId); params.put("cls", nCls); + + int total = masterService.getDataListCount(params); + int page = params.get("page").toString() != null ? Integer.parseInt(params.get("page").toString()) : 1; + int pageSize = params.get("pageSize") != null ? Integer.parseInt((String)params.get("pageSize")) : total; // 기본값 10 params.put("startRow", ((page - 1) * pageSize) + 1); - if (page > 1) { - params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1 - } else { - params.put("endRow", 10); - } + params.put("endRow", (((page - 1) * pageSize) + 1) + pageSize - 1); // startRow + pageSize - 1 List items = masterService.getDataListPaging(params); - int total = masterService.getDataListCount(params); Map result = new HashMap<>(); result.put("items", items); diff --git a/src/main/java/geoinfo/util/KeyGenerator.java b/src/main/java/geoinfo/util/KeyGenerator.java new file mode 100644 index 00000000..ef5d2e95 --- /dev/null +++ b/src/main/java/geoinfo/util/KeyGenerator.java @@ -0,0 +1,77 @@ +/********************************************************************************* +* 파 일 명 : RsBox.java +* 작 성 일 : 2005.02 +* 작 성 자 : 최군길 +*--------------------------------------------------------------------------------- +* 프로그램명 : RsBox +* 기능 및 설명 : JDBC Result Set Box Util +*--------------------------------------------------------------------------------- +* 기 타 : +*********************************************************************************/ +package geoinfo.util; + +import java.security.SecureRandom; +import java.util.*; + +public class KeyGenerator { + /** + * 키 생성에 사용될 문자셋 (영문 대문자 + 영문 소문자 + 숫자) + */ + private static final String ALPHANUMERIC_CHARACTERS = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + /** + * 생성할 키의 길이 + */ + private static final int KEY_LENGTH = 43; + + /** + * 암호학적으로 안전한 난수 생성기 인스턴스. + * 이 인스턴스는 한 번만 생성하여 재사용하는 것이 좋습니다. + */ + private static final SecureRandom secureRandom = new SecureRandom(); + + /** + * 43글자의 고유한 랜덤 키를 생성합니다. + * + * @return 43글자의 영문/숫자 랜덤 키 + */ + public static String generateUniqueKey() { + // Java 1.7에서는 StringBuilder가 더 효율적입니다. + // (StringBuffer는 스레드 안전성이 필요할 때 사용) + StringBuilder sb = new StringBuilder(KEY_LENGTH); + + for (int i = 0; i < KEY_LENGTH; i++) { + // 0부터 (문자셋 길이 - 1) 사이의 랜덤 인덱스를 가져옵니다. + int randomIndex = secureRandom.nextInt(ALPHANUMERIC_CHARACTERS.length()); + + // 문자셋에서 해당 인덱스의 문자를 선택하여 추가합니다. + char randomChar = ALPHANUMERIC_CHARACTERS.charAt(randomIndex); + sb.append(randomChar); + } + + return sb.toString(); + } + + /** + * 메인 메소드 (테스트용) + */ + public static void main(String[] args) { + // 키 생성 + String key1 = KeyGenerator.generateUniqueKey(); + String key2 = KeyGenerator.generateUniqueKey(); + + // 생성된 키와 길이 출력 + System.out.println("생성된 키 1: " + key1); + System.out.println("키 1의 길이 : " + key1.length()); + + System.out.println("-------------------------------------------------"); + + System.out.println("생성된 키 2: " + key2); + System.out.println("키 2의 길이 : " + key2.length()); + + // 두 키가 다른지 확인 (거의 100% 다름) + boolean areKeysDifferent = !key1.equals(key2); + System.out.println("두 키가 다른가? " + areKeysDifferent); + } +} diff --git a/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/GeoinfoApiV1Mapper.xml b/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/GeoinfoApiV1Mapper.xml index ad00aa0d..3ed63778 100644 --- a/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/GeoinfoApiV1Mapper.xml +++ b/src/main/resources/egovframework/sqlmap/mapper/api/geoinfo/GeoinfoApiV1Mapper.xml @@ -6,7 +6,14 @@ - + + + + 국토교통부 +
  • +
  • + + + + + + + + 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 9ba0ec09..266c2312 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,6 +181,11 @@ + 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 57011197..e34ba04d 100644 --- a/src/main/webapp/WEB-INF/views/home/include/top.jsp +++ b/src/main/webapp/WEB-INF/views/home/include/top.jsp @@ -171,6 +171,9 @@ +