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 2952e393..48741610 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/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/webapp/WEB-INF/views/body/api/apiKey.jsp b/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp new file mode 100644 index 00000000..3c74e695 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/body/api/apiKey.jsp @@ -0,0 +1,43 @@ +<%@ page language="java" contentType="text/html; charset=utf-8"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> + + + + +
+ + <%-- 사용자 타입(국토교통부/행정안전부/해안수산부/기타공공기관/일반) --%> +
    +
  • +
  • +
  • +
+ + +
+ + + + 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 @@ +