names=request.getParameterNames();
+ while (names.hasMoreElements()) {
+ String ele = (String) names.nextElement();
+ log.debug("ele:"+ele);
+ if ("csrf".equals(ele)) {
+ check=1;
+ String value=request.getParameter(ele);
+ if (value.equals(request.getSession().getAttribute("CSRF_TOKEN"))) {
+ log.debug("value:"+value);
+ return true;
+ }
+ }
+ }
+ log.debug("check:"+check);
+ if(check==0){
+ log.debug("csrfError");
+ request.getSession().setAttribute("csrfError", "true");
+ response.sendRedirect("boardList");
+ return false;
+ }
+ }
+ }
+ return true;
+ //return super.preHandle(request, response, handler);
+ }
+}
diff --git a/src/main/java/common/security/SecurityAES.java b/src/main/java/common/security/SecurityAES.java
new file mode 100644
index 0000000..581d9f3
--- /dev/null
+++ b/src/main/java/common/security/SecurityAES.java
@@ -0,0 +1,147 @@
+package common.security;
+
+import java.io.UnsupportedEncodingException;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.commons.codec.binary.Base64;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * AES 대칭키 암호/복호화 예제
+ *
+ * @author Administrator
+ * http://aesencryption.net/#Java-aes-encryption-example
+ */
+class SecurityAES {
+
+ private final static Logger log = LoggerFactory.getLogger(SecurityAES.class);
+
+ private static SecretKeySpec secretKey;
+ private static byte[] key;
+
+ private static String decryptedString;
+ private static String encryptedString;
+
+ public static void setKey(String myKey) {
+
+ MessageDigest sha = null;
+ try {
+ key = myKey.getBytes("UTF-8");
+ System.out.println("key.length:" + key.length);
+ sha = MessageDigest.getInstance("SHA-1");
+ key = sha.digest(key);
+ key = Arrays.copyOf(key, 16); // use only first 128 bit// 지우면 인코딩 안됨
+ System.out.println("key.length:" + key.length);
+ System.out.println("key:" + new String(key, "UTF-8"));
+ secretKey = new SecretKeySpec(key, "AES");
+
+ } catch (NoSuchAlgorithmException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (UnsupportedEncodingException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ }
+
+ public static String getDecryptedString() {
+ return decryptedString;
+ }
+
+ public static void setDecryptedString(String decryptedString) {
+ SecurityAES.decryptedString = decryptedString;
+ }
+
+ public static String getEncryptedString() {
+ return encryptedString;
+ }
+
+ public static void setEncryptedString(String encryptedString) {
+ SecurityAES.encryptedString = encryptedString;
+ }
+
+ /**
+ * 암호화
+ *
+ * @param strToEncrypt
+ * @return 실패시 널값 반환
+ */
+ public static String encrypt(String strToEncrypt) {
+ try {
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+
+ cipher.init(Cipher.ENCRYPT_MODE, secretKey);
+
+ setEncryptedString(Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes("UTF-8"))));
+ return getEncryptedString();
+ } catch (Exception e) {
+
+ // e.printStackTrace();
+ log.info("암호화 오류 : " + e.toString());
+ setEncryptedString(null);
+ return null;
+ }
+ }
+
+ /**
+ * 복호화
+ *
+ * @param strToDecrypt
+ * @return 실패시 널값 반환
+ */
+ public static String decrypt(String strToDecrypt) {
+ try {
+ Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
+
+ cipher.init(Cipher.DECRYPT_MODE, secretKey);
+ setDecryptedString(new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt))));
+ return getDecryptedString();
+ } catch (Exception e) {
+
+ // e.printStackTrace();
+ log.info("복호화 오류: " + e.toString());
+ setDecryptedString(null);
+ return null;
+ }
+ }
+
+ /**
+ * 실행 예제
+ *
+ * @param args
+ */
+ public static void main(String args[]) {
+
+ final String strToEncrypt = "내용";
+ final String strPssword = "암호";
+
+ SecurityAES.setKey(strPssword);// 암호키
+
+ SecurityAES.encrypt(strToEncrypt.trim());// 암호화할 내용
+
+ System.out.println("암호화할 내용: " + strToEncrypt);
+ System.out.println("암호화된 내용: " + SecurityAES.getEncryptedString());
+
+ final String strToDecrypt = SecurityAES.getEncryptedString();// 암호화된 내용
+ // 저장
+ SecurityAES.decrypt(strToDecrypt.trim());// 복호화 처리
+
+ System.out.println("복호화할 내용 : " + strToDecrypt);
+ System.out.println("복호화된 내용 : " + SecurityAES.getDecryptedString());
+
+ SecurityAES.setKey(strPssword + "ㅁ");// 틀린 암호키일 경우
+ SecurityAES.decrypt(strToDecrypt.trim());// 복호화 처리
+
+ System.out.println("복호화할 내용 : " + strToDecrypt);
+ System.out.println("복호화된 내용 : " + SecurityAES.getDecryptedString());
+
+ }
+
+}
diff --git a/src/main/java/common/security/SecuritySHA.java b/src/main/java/common/security/SecuritySHA.java
new file mode 100644
index 0000000..56bfb4d
--- /dev/null
+++ b/src/main/java/common/security/SecuritySHA.java
@@ -0,0 +1,328 @@
+package common.security;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Locale;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import common.utill.UtillsTimeChack;
+
+/**
+ * SHA 암호화 정리
+ * b는 바이트 배열
+ * s는 바이트 배열을 문자로 변환
+ * 표시가 없는건 바이트 배열을 16비트값으로 표현
+ * @author Administrator
+ */
+@Controller
+
+@RequestMapping(value = {
+ "/SecuritySHA/*"
+}) // ,method = RequestMethod.POST
+public class SecuritySHA {
+
+ private final static Logger log = LoggerFactory.getLogger(SecuritySHA.class);
+
+ /**
+ * 단일 암호화 샘플
+ * http://localhost:8080/common/sample/sample/
+ * http://localhost:8080/common/sample/ Simply selects the home view to
+ * render by returning its name. 스프링 프로젝터 생성시 기본 메소드
+ */
+ @RequestMapping(value = "/")
+ // @ResponseBody
+ public String SecuritySample(Locale locale, Model model) {
+
+ log.info("SecuritySample");
+
+ String sha;
+
+ sha = SHA256("SecuritySample").length() + ":" + SHA256("SecuritySample");
+ log.debug(sha);
+ model.addAttribute("sha256", sha);
+
+ sha = SHA512("SecuritySample").length() + ":" + SHA512("SecuritySample");
+ log.debug(sha);
+ model.addAttribute("sha512", sha);
+
+ sha = SHA512t("SecuritySample").length() + ":" + SHA512t("SecuritySample");
+ log.debug(sha);
+ model.addAttribute("sha512t", sha);
+
+ sha = SHA256s("SecuritySample").length() + ":" + SHA256s("SecuritySample");
+ log.debug(sha);
+ model.addAttribute("sha256s", sha);
+
+ sha = SHA512s("SecuritySample").length() + ":" + SHA512s("SecuritySample");
+ log.debug(sha);
+ model.addAttribute("sha512s", sha);
+
+ sha = SHA256b("SecuritySample").length + ":" + SHA256b("SecuritySample").toString();
+ log.debug(sha);
+ model.addAttribute("sha256b", sha);
+
+ sha = SHA512b("SecuritySample").length + ":" + SHA512b("SecuritySample").toString();
+ log.debug(sha);
+ model.addAttribute("sha512b", sha);
+
+ // logger.info("logger Welcome home! The client locale is.");
+ // log.info("Welcome home! The client locale is {}.", locale);
+
+ Date date = new Date();
+ DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
+
+ String formattedDate = dateFormat.format(date);
+
+ model.addAttribute("serverTime", formattedDate);
+
+ return "forward:/debug/debug.jsp";
+ }
+
+ /**
+ * 암호화
+ * 32바이트*8비트=256비트
+ *
+ * @param str
+ * @return
+ */
+ @RequestMapping(value = {
+ "/SHA256/{str}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static String SHA256(@PathVariable String str) {
+ //log.debug("SHA256");
+ String SHA = "";
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-256");
+ sh.update(str.getBytes());
+ byte byteData[] = sh.digest();
+ SHA = new String(byteData, 0, byteData.length);
+ // log.debug(byteData.length + ":" + SHA);
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < byteData.length; i++) {
+ sb.append(Integer.toString((byteData[i] & 0xff) + 0x100, 16).substring(1));
+ // sb.append(Integer.toHexString(0xff & byteData[i]));//0은 처리
+ // 안되는 문제가 있음
+ }
+ SHA = sb.toString();
+
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ SHA = null;
+ }
+ return SHA;
+ }
+
+ /**
+ * 단방향 암호화
+ * 이건 쓰지 말기
+ *
+ * @param str
+ * @return
+ */
+ @RequestMapping(value = {
+ "/SHA256s/{str}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static String SHA256s(@PathVariable String str) {
+ log.debug("SHA256s");
+ String SHA = "";
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-256");
+ sh.update(str.getBytes());
+ byte byteData[] = sh.digest();
+ SHA = new String(byteData, 0, byteData.length);
+ // log.debug(byteData.length + ":" + SHA);
+ // StringBuffer sb = new StringBuffer();
+ // for (int i = 0; i < byteData.length; i++) {
+ // sb.append(Integer.toString((byteData[i] & 0xff) + 0x100,
+ // 16).substring(1));
+ // sb.append(Integer.toHexString(0xff & byteData[i]));
+ // }
+ // SHA = sb.toString();
+
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ SHA = null;
+ }
+ return SHA;
+ }
+
+ @RequestMapping(value = {
+ "/SHA256b/{str}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static byte[] SHA256b(@PathVariable String str) {
+ log.debug("SHA256b");
+ // String SHA = "";
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-256");
+ sh.update(str.getBytes());
+ // byte byteData[] = sh.digest();
+ // SHA = new String(byteData, 0, byteData.length);
+ // log.debug(sh.digest().length + ":" + sh.digest());
+ // StringBuffer sb = new StringBuffer();
+ // for (int i = 0; i < byteData.length; i++) {
+ // sb.append(Integer.toString((byteData[i] & 0xff) + 0x100,
+ // 16).substring(1));
+ // sb.append(Integer.toHexString(0xff & byteData[i]));
+ // }
+ // SHA = sb.toString();
+ return sh.digest();
+
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ // return SHA;
+ }
+
+ @RequestMapping(value = {
+ "/SHA512/{target}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static String SHA512(@PathVariable String target) {
+ //log.debug("SHA512");
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-512");
+ sh.update(target.getBytes());
+ StringBuffer sb = new StringBuffer();
+ for (byte b : sh.digest()) {
+ // sb.append(Integer.toHexString(0xff & b));
+ sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
+ }
+ // log.debug(sb.length() + ":" + sb.toString());
+ return sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ /**
+ * 이방법 쓰지 말기 format 함수가 두배나 느림
+ * @param target
+ * @return
+ */
+ @RequestMapping(value = {
+ "/SHA512t/{target}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static String SHA512t(@PathVariable String target) {
+ //log.debug("SHA512t");
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-512");
+ sh.update(target.getBytes());
+
+ StringBuffer sb = new StringBuffer();
+ for (byte b : sh.digest()) {
+ // sb.append(Integer.toHexString(0xff & b));
+ sb.append(String.format("%02x", b&0xff));//이방법 느림 쓰지 말기 아래와 비교해서 두배나 느림
+ //sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
+ }
+ // log.debug(sb.length() + ":" + sb.toString());
+ return sb.toString();
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * 쓰지 말기
+ *
+ * @param target
+ * @return
+ */
+ @RequestMapping(value = {
+ "/SHA512s/{target}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static String SHA512s(@PathVariable String target) {
+ log.debug("SHA512s");
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-512");
+ sh.update(target.getBytes());
+ byte byteData[] = sh.digest();
+ String SHA = new String(byteData, 0, byteData.length);
+ // StringBuffer sb = new StringBuffer();
+ // for (byte b : sh.digest()) {
+ // sb.append(Integer.toHexString(0xff & b));
+ // sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
+ // }
+ // log.debug(sb.length() + ":" + sb.toString());
+ // return sb.toString();
+ // log.debug(byteData.length + ":" + SHA);
+ return SHA;
+
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /**
+ * SHA512b 방식 단방향 암호화
+ * 64바이트(*8비트)=512비트
+ *
+ * @param target
+ * @return
+ */
+ @RequestMapping(value = {
+ "/SHA512b/{target}"
+ }) // ,method = RequestMethod.POST
+ @ResponseBody
+ public final static byte[] SHA512b(@PathVariable String target) {
+ log.debug("SHA512b");
+ try {
+ MessageDigest sh = MessageDigest.getInstance("SHA-512");
+ sh.update(target.getBytes());
+ // log.debug(sh.digest().length + ":" + sh.digest());
+ // byte byteData[] = sh.digest();
+ // String SHA = new String(byteData, 0, byteData.length);
+ // StringBuffer sb = new StringBuffer();
+ // for (byte b : sh.digest()) {
+ // sb.append(Integer.toHexString(0xff & b));
+ // sb.append(Integer.toString((b & 0xff) + 0x100, 16).substring(1));
+ // }
+ // log.debug(sb.length() + ":" + sb.toString());
+ // return sb.toString();
+ // log.debug(sh.digest().length + ":" + sh.digest());
+ return sh.digest();
+
+ } catch (NoSuchAlgorithmException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static void main(String[] args) {
+
+ UtillsTimeChack t1=new UtillsTimeChack();
+ UtillsTimeChack t2=new UtillsTimeChack();
+
+ t1.setStart();
+ log.debug("{}",t1.getStart());
+ for (int i = 0; i < 10000; i++) {
+ SHA512("SecuritySample");
+ }
+ t1.setEnd();
+ log.debug("{}",t1.getEnd());
+
+ t2.setStart();
+ log.debug("{}",t1.getStart());
+ for (int i = 0; i < 10000; i++) {
+ SHA512t("SecuritySample");
+ }
+ t2.setEnd();
+ log.debug("{}",t1.getEnd());
+
+ log.debug("{}",t1.getTime());
+ log.debug("{}",t2.getTime());
+
+
+ }
+}
diff --git a/src/main/java/common/security/XSSFilter.java b/src/main/java/common/security/XSSFilter.java
new file mode 100644
index 0000000..08bb9a1
--- /dev/null
+++ b/src/main/java/common/security/XSSFilter.java
@@ -0,0 +1,40 @@
+package common.security;
+
+
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class XSSFilter implements Filter{
+
+ private final Logger log = LoggerFactory.getLogger(this.getClass());
+
+ @Override
+ public void destroy() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void doFilter(ServletRequest request, ServletResponse response,
+ FilterChain chain) throws IOException, ServletException {
+ log.debug("doFilter 호출");
+ chain.doFilter(new XSSRequestWrapper((HttpServletRequest) request),response);
+ }
+
+ @Override
+ public void init(FilterConfig arg0) throws ServletException {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/src/main/java/common/security/XSSRequestWrapper.java b/src/main/java/common/security/XSSRequestWrapper.java
new file mode 100644
index 0000000..a78afe0
--- /dev/null
+++ b/src/main/java/common/security/XSSRequestWrapper.java
@@ -0,0 +1,63 @@
+package common.security;
+
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class XSSRequestWrapper extends HttpServletRequestWrapper {
+
+ private final Logger log = LoggerFactory.getLogger(this.getClass());
+
+ private static Pattern[] patterns = new Pattern[] {
+ Pattern.compile("", Pattern.CASE_INSENSITIVE),
+ Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'",
+ Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
+ Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"",
+ Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
+ Pattern.compile("", Pattern.CASE_INSENSITIVE),
+ Pattern.compile(" -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/lucy-xss.xml b/src/main/resources/lucy-xss.xml
new file mode 100644
index 0000000..528b7fd
--- /dev/null
+++ b/src/main/resources/lucy-xss.xml
@@ -0,0 +1,36 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/Member/jsp/join.jsp b/src/main/webapp/WEB-INF/Member/jsp/join.jsp
new file mode 100644
index 0000000..960c9ce
--- /dev/null
+++ b/src/main/webapp/WEB-INF/Member/jsp/join.jsp
@@ -0,0 +1,13 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+
+
+
+
+join
+
+
+
+<%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/Member/servlet/servlet-Member.xml b/src/main/webapp/WEB-INF/Member/servlet/servlet-Member.xml
new file mode 100644
index 0000000..f0f935a
--- /dev/null
+++ b/src/main/webapp/WEB-INF/Member/servlet/servlet-Member.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/board/jsp/board/.gitignore b/src/main/webapp/WEB-INF/board/jsp/board/.gitignore
new file mode 100644
index 0000000..6358cd4
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/board/.gitignore
@@ -0,0 +1 @@
+/desktop.ini
diff --git a/src/main/webapp/WEB-INF/board/jsp/board/boardDetail.jsp b/src/main/webapp/WEB-INF/board/jsp/board/boardDetail.jsp
new file mode 100644
index 0000000..ad23958
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/board/boardDetail.jsp
@@ -0,0 +1,68 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+
+
+
+
+boardList.jsp
+
+
+
+
+ ۹ȣ |
+ ${ vo.b_no } |
+
+
+ |
+ |
+
+
+ |
+ |
+
+
+ ʳ |
+ ${ vo.b_indate } |
+
+
+ |
+ ${ vo.b_delete } |
+
+ <%--
+ ȸ |
+ ${ vo.hit } |
+
--%>
+
+ ȸȣ |
+ ${ vo.u_no } |
+
+
+ Ƶ |
+ |
+
+
+ г |
+ |
+
+
+ |
+ ${ vo.u_delete } |
+
+
+ |
+ |
+
+
+ |
+ ${ prev.b_title } |
+
+
+ |
+ ${ next.b_title } |
+
+
+
+ <%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/board/boardList.jsp b/src/main/webapp/WEB-INF/board/jsp/board/boardList.jsp
new file mode 100644
index 0000000..29f45d0
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/board/boardList.jsp
@@ -0,0 +1,105 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+
+
+
+
+boardList.jsp
+
+
+
+
+
+
+
+
+
+
+
+
+ ۹ȣ |
+ |
+
+ |
+ ȸȣ |
+ ̵ |
+ г |
+ Ż |
+
+
+
+
+
+ ${row.b_no} |
+ ${row.b_title} |
+ <%-- ${row.b_content} | --%>
+ ${row.b_delete} |
+ ${row.u_no} |
+ ${row.u_id} |
+ ${row.u_nick} |
+ ${row.u_delete} |
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/board/boardMain.jsp b/src/main/webapp/WEB-INF/board/jsp/board/boardMain.jsp
new file mode 100644
index 0000000..c1b4f73
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/board/boardMain.jsp
@@ -0,0 +1,18 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+
+
+
+
+
+
+
+
+
+ <%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/board/boardWrite.jsp b/src/main/webapp/WEB-INF/board/jsp/board/boardWrite.jsp
new file mode 100644
index 0000000..f3c38d7
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/board/boardWrite.jsp
@@ -0,0 +1,58 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+
+
+
+<%@ include file="../include/easyui.jsp"%>
+
+
+
+<%-- <%@ include file="/WEB-INF/include/include-body.jspf"%> --%>
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/file/fileForm.jsp b/src/main/webapp/WEB-INF/board/jsp/file/fileForm.jsp
new file mode 100644
index 0000000..8200d1e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/file/fileForm.jsp
@@ -0,0 +1,45 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8"
+ pageEncoding="UTF-8"%>
+
+
+
+
+Insert title here
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/file/fileMain.jsp b/src/main/webapp/WEB-INF/board/jsp/file/fileMain.jsp
new file mode 100644
index 0000000..6e768c1
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/file/fileMain.jsp
@@ -0,0 +1,14 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+
+
+
+
+Insert title here
+
+
+ ڷ http://gangzzang.tistory.com/125
+ ${test }
+ <%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/include/.gitignore b/src/main/webapp/WEB-INF/board/jsp/include/.gitignore
new file mode 100644
index 0000000..6358cd4
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/include/.gitignore
@@ -0,0 +1 @@
+/desktop.ini
diff --git a/src/main/webapp/WEB-INF/board/jsp/include/easyui.jsp b/src/main/webapp/WEB-INF/board/jsp/include/easyui.jsp
new file mode 100644
index 0000000..80a7157
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/include/easyui.jsp
@@ -0,0 +1,10 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+">
+">
+">
+">
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/user/.gitignore b/src/main/webapp/WEB-INF/board/jsp/user/.gitignore
new file mode 100644
index 0000000..6358cd4
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/user/.gitignore
@@ -0,0 +1 @@
+/desktop.ini
diff --git a/src/main/webapp/WEB-INF/board/jsp/user/userInsertForm.jsp b/src/main/webapp/WEB-INF/board/jsp/user/userInsertForm.jsp
new file mode 100644
index 0000000..3227e10
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/user/userInsertForm.jsp
@@ -0,0 +1,155 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+
+
+
+
+Insert title here
+
+
+
+
+
+
+
+
+
+//==================================================
+$('#ff').form({
+ url:...,
+ onSubmit: function(){
+ // do some check
+ // return false to prevent submit;
+ },
+ success:function(data){
+ alert(data)
+ }
+});
+// submit the form
+$('#ff').submit();
+
+//==================================================
+// call 'submit' method of form plugin to submit the form
+$('#ff').form('submit', {
+ url:...,
+ onSubmit: function(){
+ // do some check
+ // return false to prevent submit;
+ },
+ success:function(data){
+ alert(data)
+ }
+});
+
+//==================================================
+$('#ff').form('submit', {
+ url:...,
+ onSubmit: function(param){
+ param.p1 = 'value1';
+ param.p2 = 'value2';
+ }
+});
+
+//==================================================
+{
+ "success": true,
+ "message": "Message sent successfully."
+}
+
+$('#ff').form('submit', {
+ success: function(data){
+ var data = eval('(' + data + ')'); // change the JSON string to javascript object
+ if (data.success){
+ alert(data.message)
+ }
+ }
+});
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/user/userList.jsp b/src/main/webapp/WEB-INF/board/jsp/user/userList.jsp
new file mode 100644
index 0000000..4928b70
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/user/userList.jsp
@@ -0,0 +1,102 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
+
+
+
+
+userList.jsp
+
+
+
+
+
+
+
+
+
+
+
+
+ ȸȣ |
+ ̵ |
+ |
+ г |
+ Գ |
+ Ż |
+
+
+
+
+
+ ${row.u_no} |
+ ${row.u_id} |
+ ${row.u_pw} |
+ ${row.u_nick} |
+ ${row.u_indate} |
+ ${row.u_delete} |
+ <%-- ${row.b_title} | --%>
+ <%-- ${row.b_content} | --%>
+ <%-- ${row.u_nick} | --%>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/user/userLogin.jsp b/src/main/webapp/WEB-INF/board/jsp/user/userLogin.jsp
new file mode 100644
index 0000000..09cb283
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/user/userLogin.jsp
@@ -0,0 +1,12 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+
+
+
+
+Insert title here
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/jsp/user/userMain.jsp b/src/main/webapp/WEB-INF/board/jsp/user/userMain.jsp
new file mode 100644
index 0000000..a3ba465
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/jsp/user/userMain.jsp
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+
+
+
+
+
+
+
+
+
+ <%@ include file="/debug/debug.jsp"%>
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board/servlet/servlet-board.xml b/src/main/webapp/WEB-INF/board/servlet/servlet-board.xml
new file mode 100644
index 0000000..9ffe879
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board/servlet/servlet-board.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/board2/jsp/list.jsp b/src/main/webapp/WEB-INF/board2/jsp/list.jsp
new file mode 100644
index 0000000..cd74029
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board2/jsp/list.jsp
@@ -0,0 +1,94 @@
+<%@ page language="java" contentType="text/html; charset=EUC-KR"
+ pageEncoding="EUC-KR"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+
+
+
+
+
+
+
+
+Insert title here
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board2/res/boardActionJs.js b/src/main/webapp/WEB-INF/board2/res/boardActionJs.js
new file mode 100644
index 0000000..a446f7a
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board2/res/boardActionJs.js
@@ -0,0 +1,12 @@
+// 검색
+function boardListSearchGo(){
+document.listForm.action ="/board/list.html";
+document.listForm.submit();
+}
+
+// 검색Text입력 후 바로 엔터 가능하게 하는 이벤트
+function enterEvent(){
+if(window.event.keyCode == 13){
+boardListSearchGo();
+}
+}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board2/res/boardCss.css b/src/main/webapp/WEB-INF/board2/res/boardCss.css
new file mode 100644
index 0000000..03037e0
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board2/res/boardCss.css
@@ -0,0 +1,11 @@
+@CHARSET "EUC-KR";
+td{text-align: center;}
+th{text-align: center;}
+
+a:link{ text-decoration:none; color: #5D5D5D;}
+a:visited{ text-decoration:none; color: #5D5D5D;}
+a:active{ text-decoration:none; color: #47C83E;}
+a:hover{ text-decoration:none; color: #47C83E;}
+.listTable{width:600px;}
+#boardListCount{text-align: right;}
+#boardList_a{font-weight: bold; color:#8041D9;}
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/board2/servlet/servlet-board2.xml b/src/main/webapp/WEB-INF/board2/servlet/servlet-board2.xml
new file mode 100644
index 0000000..6b8aae0
--- /dev/null
+++ b/src/main/webapp/WEB-INF/board2/servlet/servlet-board2.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ list
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/common/servlet/servlet-common.xml b/src/main/webapp/WEB-INF/common/servlet/servlet-common.xml
new file mode 100644
index 0000000..dbb1d49
--- /dev/null
+++ b/src/main/webapp/WEB-INF/common/servlet/servlet-common.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/context/SqlMapConfig.xml.bak b/src/main/webapp/WEB-INF/context/SqlMapConfig.xml.bak
new file mode 100644
index 0000000..2c4696e
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/SqlMapConfig.xml.bak
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/context/context-aspect.xml b/src/main/webapp/WEB-INF/context/context-aspect.xml
new file mode 100644
index 0000000..49a3df3
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-aspect.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/context/context-board2.xml b/src/main/webapp/WEB-INF/context/context-board2.xml
new file mode 100644
index 0000000..f7e98bd
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-board2.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/context/context-defult-orcl.xml b/src/main/webapp/WEB-INF/context/context-defult-orcl.xml
new file mode 100644
index 0000000..c3b9868
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-defult-orcl.xml
@@ -0,0 +1,124 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ classpath*:/sql/**/sql-*.xml
+ /WEB-INF/sql/**/sql-*.xml
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/context/context-defult.xml b/src/main/webapp/WEB-INF/context/context-defult.xml
new file mode 100644
index 0000000..f7a30f0
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-defult.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/context/context-first-orcl.xml b/src/main/webapp/WEB-INF/context/context-first-orcl.xml
new file mode 100644
index 0000000..6d2a658
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-first-orcl.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ classpath*:/sql/**/sql-*.xml
+ /WEB-INF/sql/**/sql-*.xml
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/context/context-page-egov.xml b/src/main/webapp/WEB-INF/context/context-page-egov.xml
new file mode 100644
index 0000000..e934f0a
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-page-egov.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/context/context-scott-orcl.xml b/src/main/webapp/WEB-INF/context/context-scott-orcl.xml
new file mode 100644
index 0000000..1d68028
--- /dev/null
+++ b/src/main/webapp/WEB-INF/context/context-scott-orcl.xml
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ classpath*:/sql/scott/**/sql-*.xml
+ /WEB-INF/sql/scott/**/sql-*.xml
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/webapp/WEB-INF/daumeditor/servlet/servlet-common.xml b/src/main/webapp/WEB-INF/daumeditor/servlet/servlet-common.xml
new file mode 100644
index 0000000..56c8d4d
--- /dev/null
+++ b/src/main/webapp/WEB-INF/daumeditor/servlet/servlet-common.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/defult/jsp/defult.jsp b/src/main/webapp/WEB-INF/defult/jsp/defult.jsp
new file mode 100644
index 0000000..06b25bc
--- /dev/null
+++ b/src/main/webapp/WEB-INF/defult/jsp/defult.jsp
@@ -0,0 +1,17 @@
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
+<%@ page session="false" %>
+
+
+ defult
+
+
+
+ Hello world! defult
+
+
+ The time on the server is ${serverTime}.
+
+<%@ include file="/debug/debug.jsp" %>
+
+
diff --git a/src/main/webapp/WEB-INF/defult/servlet/servlet-defult.xml b/src/main/webapp/WEB-INF/defult/servlet/servlet-defult.xml
new file mode 100644
index 0000000..12ba816
--- /dev/null
+++ b/src/main/webapp/WEB-INF/defult/servlet/servlet-defult.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/webapp/WEB-INF/views/jsp/index.jsp b/src/main/webapp/WEB-INF/egov/jsp/index.jsp
similarity index 91%
rename from src/main/webapp/WEB-INF/views/jsp/index.jsp
rename to src/main/webapp/WEB-INF/egov/jsp/index.jsp
index 5d71903..ef3993d 100644
--- a/src/main/webapp/WEB-INF/views/jsp/index.jsp
+++ b/src/main/webapp/WEB-INF/egov/jsp/index.jsp
@@ -1,81 +1,82 @@
-<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
-<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
-
-
-
-Gradle + Spring MVC
-
-
-
-
-
-
-
-
-
-
-
-
${title}
-
-
- Hello ${msg}
-
-
-
- Welcome Welcome!
-
-
-
- Learn more
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
+<%@ taglib prefix="spring" uri="http://www.springframework.org/tags"%>
+<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
+
+
+
+Gradle + Spring MVC
+
+
+
+
+
+
+
+
+
+
+
+
${title}
+
+
+ Hello ${msg}
+
+
+
+ Welcome Welcome!
+
+
+
+ Learn more
+
+
+
+
+
+
+
+
+
+
+
+
+
+