From 24d392261d939d757b180e299a360c0a5d0d37ab Mon Sep 17 00:00:00 2001 From: myname Date: Fri, 14 Apr 2023 17:45:45 +0900 Subject: [PATCH] =?UTF-8?q?2023-04-14=2017:43=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=EC=85=89=ED=8A=B8=20=EC=B6=94=EA=B0=80=ED=95=98=EC=97=AC=20?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=82=A8=EA=B8=B0=EA=B8=B0,=20IP=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC,=20=ED=82=A4=EA=B2=80=EC=A6=9D(accessKey,=20mberId)?= =?UTF-8?q?=EC=9D=84=20=EA=B3=B5=ED=86=B5=EC=9C=BC=EB=A1=9C=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=ED=95=98=EB=8F=84=EB=A1=9D=20=ED=95=98=EC=98=80?= =?UTF-8?q?=EC=8A=B5=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 추가로 API의 결과 형태를 json, plain 두가지를 지원하도록 샘플 개발 하였음 --- pom.xml | 21 ++ .../com/itn/mjonApi/cmn/config/WebConfig.java | 37 +++ .../cmn/idgen/mapper/domain/AccessKeyVO.java | 32 +++ .../idgen/mapper/domain/LettnLoginLogVO.java | 31 +++ .../cmn/idgen/mapper/domain/SendMsgVO.java | 56 ++++ .../interceptor/CertificationInterceptor.java | 179 ++++++++++++ .../itn/mjonApi/cmn/msg/PlainResponse.java | 57 ++++ .../com/itn/mjonApi/cmn/msg/RestResponse.java | 35 ++- .../mjon/api/service/AccessKeyService.java | 21 ++ .../mjon/api/service/AccessTokenService.java | 23 ++ .../service/impl/AccessKeyServiceImpl.java | 69 +++++ .../service/impl/AccessTokenServiceImpl.java | 75 +++++ .../api/service/mapper/AccessKeyMapper.java | 25 ++ .../api/service/mapper/AccessTokenMapper.java | 28 ++ .../mjon/api/web/AccessKeyRestController.java | 263 ++++++++++++++++++ .../log/service/LettnLoginLogService.java | 30 ++ .../impl/LettnLoginLogServiceImpl.java | 78 ++++++ .../service/mapper/LettnLoginLogMapper.java | 27 ++ .../service/impl/MemberServiceImpl.java | 4 +- src/main/resources/application-dev.properties | 8 +- src/main/resources/application.properties | 8 +- src/main/resources/log4jdbc.log4j2.properties | 2 + .../resources/mapper/api/AccessKeyMapper.xml | 129 +++++++++ .../mapper/api/AccessTokenMapper.xml | 130 +++++++++ .../resources/mapper/log/LettnLoginLog.xml | 127 +++++++++ 25 files changed, 1483 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/itn/mjonApi/cmn/config/WebConfig.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/AccessKeyVO.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/LettnLoginLogVO.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/SendMsgVO.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/interceptor/CertificationInterceptor.java create mode 100644 src/main/java/com/itn/mjonApi/cmn/msg/PlainResponse.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/service/AccessKeyService.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/service/AccessTokenService.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessKeyServiceImpl.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessTokenServiceImpl.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessKeyMapper.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessTokenMapper.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/log/service/LettnLoginLogService.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/log/service/impl/LettnLoginLogServiceImpl.java create mode 100644 src/main/java/com/itn/mjonApi/mjon/log/service/mapper/LettnLoginLogMapper.java create mode 100644 src/main/resources/log4jdbc.log4j2.properties create mode 100644 src/main/resources/mapper/api/AccessKeyMapper.xml create mode 100644 src/main/resources/mapper/api/AccessTokenMapper.xml create mode 100644 src/main/resources/mapper/log/LettnLoginLog.xml diff --git a/pom.xml b/pom.xml index 21ba42e..4189ef9 100644 --- a/pom.xml +++ b/pom.xml @@ -66,6 +66,27 @@ spring-restdocs-mockmvc test + + + + org.springframework.boot + spring-boot-devtools + + + + + org.bgee.log4jdbc-log4j2 + log4jdbc-log4j2-jdbc4.1 + 1.16 + + + + + com.googlecode.json-simple + json-simple + 1.1.1 + + diff --git a/src/main/java/com/itn/mjonApi/cmn/config/WebConfig.java b/src/main/java/com/itn/mjonApi/cmn/config/WebConfig.java new file mode 100644 index 0000000..51ee0d2 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/config/WebConfig.java @@ -0,0 +1,37 @@ +package com.itn.mjonApi.cmn.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import com.itn.mjonApi.cmn.interceptor.CertificationInterceptor; + +/** + * packageName : com.itn.mjonApi.mjon.send.web + * fileName : SendRestController + * author : hylee + * date : 2023-02-15 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-02-15 hylee 최초 생성 + */ + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Bean + public CertificationInterceptor certificationInterceptor(){ + return new CertificationInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(certificationInterceptor()) + .addPathPatterns("/api/**"); + //.excludePathPatterns("/css/**", "/images/**", "/js/**"); + } + +} \ No newline at end of file diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/AccessKeyVO.java b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/AccessKeyVO.java new file mode 100644 index 0000000..e40e406 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/AccessKeyVO.java @@ -0,0 +1,32 @@ +package com.itn.mjonApi.cmn.idgen.mapper.domain; +/* + table : mj_mymsg + comment : '내문자 보관함'; +*/ + +import lombok.*; + +import java.io.Serializable; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class AccessKeyVO implements Serializable { + + private static final long serialVersionUID = -7865729705175845268L; + private String accessNo; //access_key 고유번호 + private String mberId; //일반회원ID + private String accessKey; //access_key + private String useYn; //사용여부Y/N + private String frstRegistPnttm; //최초등록일시 + private String frstRegisterId; //최초등록자ID + private String lastUpdtPnttm; //최종수정일시 + private String lastUpdusrId; //최종수정자ID + + //for access_token + private String accessToken; //access_token 고유번호 + private String tokenObj; //access_token 고유번호 + private String expirePnttm; //access_token 파기일시 + +} \ No newline at end of file diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/LettnLoginLogVO.java b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/LettnLoginLogVO.java new file mode 100644 index 0000000..a2d86d0 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/LettnLoginLogVO.java @@ -0,0 +1,31 @@ +package com.itn.mjonApi.cmn.idgen.mapper.domain; +/* + table : mj_mymsg + comment : '내문자 보관함'; +*/ + +import lombok.*; + +import java.io.Serializable; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class LettnLoginLogVO implements Serializable { + + private static final long serialVersionUID = -7865729705175845268L; + private String logId; //log id + private String conectId; //접속ID + private String conectIp; //접속IP + private String userAt; //사용자 여부 + private String deviceType; //device type + private String progrmFileNm; //프로그램파일명 + private String menuNo; //메뉴번호 + private String menuNm; //메뉴명 + private String url; //접속URL + private String creatDt; //생성일자 + + private int cnt; //count + +} \ No newline at end of file diff --git a/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/SendMsgVO.java b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/SendMsgVO.java new file mode 100644 index 0000000..b4f515c --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/idgen/mapper/domain/SendMsgVO.java @@ -0,0 +1,56 @@ +package com.itn.mjonApi.cmn.idgen.mapper.domain; +/* + table : mj_mymsg + comment : '내문자 보관함'; +*/ + +import lombok.*; + +import java.io.Serializable; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class SendMsgVO implements Serializable { + + private static final long serialVersionUID = -7865729705175845268L; + + private String accessKey; //인증용 API Key O String + private String mberId; //사용자id O String + + private String sender; //발신자 전화번호 (최대 16bytes) O String + private String receiver; //수신자 전화번호 - 컴마(,)분기 입력으로 최대 1천명 O String + private String msg; //메시지 내용 O String (1~2,000Byte) + private String msg_type; //SMS(단문) , LMS(장문), MMS(그림문자) 구분 X String + private String title; //문자제목(LMS,MMS만 허용) X String (1~44Byte) + private String destination; //%치환% 치환명 입력, 수신자 전화번호 수량 만큼 넣어야 한다. X String + private String rdate; //발송일 (현재일이상) X YYYYMMDD + private String rtime; //발송시간 - 현재시간기준 10분이내나 0 이면 바로 발송 X HHII + //private String image1; //첨부이미지 (image 또는 image1) X JPEG,PNG,GIF + //private String image2; //첨부이미지 X JPEG,PNG,GIF + //private String image3; //첨부이미지 X JPEG,PNG,GIF + private String testmodeYn; //연동테스트시 Y 적용 X String + + //sendMsg 문자 발송 전 체크 사항 + //step1.발신자 전화번호 사용 가능 여부 체크(해당 사용자의 기 등록된 번호만 발송 가능) + // 1010 + + //step2.수신자 전화번호 정상 여부 체크(정상 번호에 대해서만 발송 가능) + // 1020 + + //step3.문자 내용 정상 여부 확인 - 스미싱 문구는 발송 안됨 + // 1030 + + //step4.치환명 정상 여부 확인 + // 1040 + + //step5.발송일시 정상여부 확인 + // 1050 + + //step6.문자 타입에 따른 비용 처리 가능 여부 확인 + // 1060 +} + + + diff --git a/src/main/java/com/itn/mjonApi/cmn/interceptor/CertificationInterceptor.java b/src/main/java/com/itn/mjonApi/cmn/interceptor/CertificationInterceptor.java new file mode 100644 index 0000000..5a56221 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/interceptor/CertificationInterceptor.java @@ -0,0 +1,179 @@ +package com.itn.mjonApi.cmn.interceptor; + +//import java.sql.Date; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.LettnLoginLogVO; +import com.itn.mjonApi.mjon.api.service.AccessKeyService; +import com.itn.mjonApi.mjon.log.service.LettnLoginLogService; + +/** + * packageName : com.itn.mjonApi.mjon.send.web + * fileName : SendRestController + * author : hylee + * date : 2023-02-15 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-02-15 hylee 최초 생성 + */ +//@Component +public class CertificationInterceptor implements HandlerInterceptor{ + + @Autowired + private AccessKeyService accessKeyService; + + @Autowired + private LettnLoginLogService lettnLoginLogService; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + //HttpSession session = request.getSession(); + + System.out.println("=====preHandle=4=apikey=="); + System.out.println("=====preHandle=4=apikey=="+request.getRequestURI()); + + System.out.println("=====preHandle=4=apikey=="+request.getRemoteAddr()); + System.out.println("=====preHandle=4=apikey=="+request.getRemoteHost()); + System.out.println("=====preHandle=4=apikey=="+request.getRemotePort()); + System.out.println("=====preHandle=4=apikey=="+request.getRemoteUser()); + System.out.println("=====preHandle=4=apikey=="+request.getRequestedSessionId()); + System.out.println("=====preHandle=4=apikey=="); + + + + //step0-1.log 남기기 + //step0-2.IP 체크 + { + try{ + //step0-1.log 남기기 + LettnLoginLogVO lettnLoginLogVO = new LettnLoginLogVO(); + + //ip + HttpServletRequest req = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest(); + String ip = req.getHeader("X-FORWARDED-FOR"); + if (ip == null){ ip = req.getRemoteAddr();} + + lettnLoginLogVO.setConectIp(ip); + + //사용자 여부 + lettnLoginLogVO.setUserAt("U"); + + //사용자 ID + lettnLoginLogVO.setConectId(request.getParameter("mberId")); + + //device type + if(isMobile(request)){ + lettnLoginLogVO.setDeviceType("M"); + }else{ + lettnLoginLogVO.setDeviceType("P"); + } + + //program_nm + lettnLoginLogVO.setProgrmFileNm("API"); + lettnLoginLogVO.setMenuNm("API"); + lettnLoginLogVO.setMenuNo("100"); + + //url + lettnLoginLogVO.setUrl(request.getRequestURI()); + //IP 컬럼 길이를 늘려서 비교 조건 제거함 2023-04-05 + if (lettnLoginLogVO.getUrl().length()>200){ //길이문제로 오류가 발생하는 경우도 처리하도록 수정 + lettnLoginLogVO.setUrl(lettnLoginLogVO.getUrl().substring(0,199)); + } + + lettnLoginLogService.insert(lettnLoginLogVO); + + + //step0-2.IP 체크 + lettnLoginLogVO = lettnLoginLogService.selectIgnoreIpCnt(lettnLoginLogVO); + int i_ignoreCnt = lettnLoginLogVO.getCnt(); + + if (i_ignoreCnt>0) { + //제한 아이피인 경우는 화면 안나옴 처리 + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write("{\"resultCode\":\"403\",\"message\":\"Forbidden\"}"); + + return false; + } + + }catch(Exception ex) { + ex.printStackTrace(); + + } + + } + + //step1.키 검증 - accessKey & mberId 는 검증을 위한 필수값 + { + try{ + AccessKeyVO accessKeyVO = new AccessKeyVO(); + accessKeyVO.setAccessKey(request.getParameter("accessKey")); + accessKeyVO.setMberId(request.getParameter("mberId")); + + accessKeyVO = accessKeyService.selectRKey(accessKeyVO); + + if (accessKeyVO ==null) { + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write("{\"resultCode\":\"401\",\"message\":\"Unauthorized\"}"); + + return false; + } + + }catch(Exception ex) { + ex.printStackTrace(); + + response.setContentType("application/json"); + response.setCharacterEncoding("UTF-8"); + response.getWriter().write("{\"resultCode\":\"401\",\"message\":\"Unauthorized\"}"); + + return false; + } + } + + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + // TODO Auto-generated method stub + System.out.println("=====postHandle=4=apikey=="); + + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + // TODO Auto-generated method stub + System.out.println("=====afterCompletion=4=apikey=="); + + } + + /*모바일접속 유무*/ + private boolean isMobile(HttpServletRequest request) { + String userAgent = request.getHeader("user-agent"); + boolean mobile1 = userAgent.matches(".*(iPhone|iPod|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson).*"); + boolean mobile2 = userAgent.matches(".*(LG|SAMSUNG|Samsung).*"); + if(mobile1 || mobile2) { + return true; + } + return false; + } + +} diff --git a/src/main/java/com/itn/mjonApi/cmn/msg/PlainResponse.java b/src/main/java/com/itn/mjonApi/cmn/msg/PlainResponse.java new file mode 100644 index 0000000..68fbc9e --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/msg/PlainResponse.java @@ -0,0 +1,57 @@ +package com.itn.mjonApi.cmn.msg; + +import lombok.Getter; +import lombok.Setter; +import org.springframework.http.HttpStatus; + +import java.time.LocalDateTime; +import java.util.List; + +@Setter +@Getter +public class PlainResponse { + + //private HttpStatus status; + private int resultCode; + + private String message; + + private LocalDateTime localDateTime; + + private Object object; + + private List objectList; + + /* + * 200-OK : 정상접속 + * 401-Unauthorized : 인증실패 + * + * */ + + public PlainResponse(HttpStatus status, String message, LocalDateTime timestamp) { + this.resultCode = status.value(); + checkMessage(status, message); + this.localDateTime = timestamp; + } + + public PlainResponse(HttpStatus status, String message, LocalDateTime timestamp, Object object) { + this.resultCode = status.value(); + checkMessage(status, message); + + this.object= object; + this.localDateTime = timestamp; + } + + public PlainResponse(HttpStatus status, String message, LocalDateTime timestamp, List objectList) { + this.resultCode = status.value(); + checkMessage(status, message); + + this.objectList = objectList; + this.localDateTime = timestamp; + } + + private void checkMessage(HttpStatus status, String message) { + if ("".equals(message)){ this.message = status.name(); + }else { this.message = message; } + } +} diff --git a/src/main/java/com/itn/mjonApi/cmn/msg/RestResponse.java b/src/main/java/com/itn/mjonApi/cmn/msg/RestResponse.java index 6b8fc05..fb6fa22 100644 --- a/src/main/java/com/itn/mjonApi/cmn/msg/RestResponse.java +++ b/src/main/java/com/itn/mjonApi/cmn/msg/RestResponse.java @@ -11,26 +11,47 @@ import java.util.List; @Getter public class RestResponse { - private HttpStatus status; + //private HttpStatus status; + private int resultCode; private String message; private LocalDateTime localDateTime; + private Object object; + private List objectList; + /* + * 200-OK : 정상접속 + * 401-Unauthorized : 인증실패 + * + * */ public RestResponse(HttpStatus status, String message, LocalDateTime timestamp) { - this.status = status; - this.message = message; + this.resultCode = status.value(); + checkMessage(status, message); this.localDateTime = timestamp; } - public RestResponse(HttpStatus status, String message, List objectList, LocalDateTime timestamp) { - this.status = status; - this.message = message; + + public RestResponse(HttpStatus status, String message, LocalDateTime timestamp, Object object) { + this.resultCode = status.value(); + checkMessage(status, message); + + this.object= object; + this.localDateTime = timestamp; + } + + public RestResponse(HttpStatus status, String message, LocalDateTime timestamp, List objectList) { + this.resultCode = status.value(); + checkMessage(status, message); + this.objectList = objectList; this.localDateTime = timestamp; } - + private void checkMessage(HttpStatus status, String message) { + if ("".equals(message)){ this.message = status.name(); + }else { this.message = message; } + } } diff --git a/src/main/java/com/itn/mjonApi/mjon/api/service/AccessKeyService.java b/src/main/java/com/itn/mjonApi/mjon/api/service/AccessKeyService.java new file mode 100644 index 0000000..833e7ea --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/service/AccessKeyService.java @@ -0,0 +1,21 @@ +package com.itn.mjonApi.mjon.api.service; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.msg.RestResponse; + +public interface AccessKeyService { + + RestResponse insert(AccessKeyVO accessKeyVO); + + RestResponse selectR(AccessKeyVO accessKeyVO); + + RestResponse selectL(AccessKeyVO accessKeyVO); + + //AccessKeyVO selectR(AccessKeyVO accessKeyVO); + + AccessKeyVO selectRKey(AccessKeyVO accessKeyVO); + + RestResponse update(AccessKeyVO accessKeyVO); + + RestResponse delete(AccessKeyVO accessKeyVO); +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/service/AccessTokenService.java b/src/main/java/com/itn/mjonApi/mjon/api/service/AccessTokenService.java new file mode 100644 index 0000000..d0ce0d1 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/service/AccessTokenService.java @@ -0,0 +1,23 @@ +package com.itn.mjonApi.mjon.api.service; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.msg.RestResponse; + +public interface AccessTokenService { + + RestResponse findAll(); + + RestResponse insert(AccessKeyVO accessKeyVO); + + RestResponse selectR(AccessKeyVO accessKeyVO); + + RestResponse selectL(AccessKeyVO accessKeyVO); + + //AccessKeyVO selectR(AccessKeyVO accessKeyVO); + + AccessKeyVO selectRKey(AccessKeyVO accessKeyVO); + + RestResponse update(AccessKeyVO accessKeyVO); + + RestResponse delete(AccessKeyVO accessKeyVO); +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessKeyServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessKeyServiceImpl.java new file mode 100644 index 0000000..018f09f --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessKeyServiceImpl.java @@ -0,0 +1,69 @@ +package com.itn.mjonApi.mjon.api.service.impl; + +import java.time.LocalDateTime; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.service.AccessKeyService; +import com.itn.mjonApi.mjon.api.service.mapper.AccessKeyMapper; + +@Service +public class AccessKeyServiceImpl implements AccessKeyService { + + @Autowired + AccessKeyMapper accessKeyMapper; + + + @Override + public RestResponse insert(AccessKeyVO accessKeyVO) { + int i_ret = accessKeyMapper.insert(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + + @Override + public RestResponse selectR(AccessKeyVO accessKeyVO) { + AccessKeyVO MyMsgListVO = accessKeyMapper.selectR(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + @Override + public RestResponse selectL(AccessKeyVO accessKeyVO) { + List MyMsgListVO = accessKeyMapper.selectL(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + /* + @Override + public AccessKeyVO selectR(AccessKeyVO p_accessKeyVO) { + AccessKeyVO accessKeyVO = accessKeyMapper.selectR(p_accessKeyVO); + return accessKeyVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + */ + + @Override + public AccessKeyVO selectRKey(AccessKeyVO p_accessKeyVO) { + AccessKeyVO accessKeyVO = accessKeyMapper.selectRKey(p_accessKeyVO); + return accessKeyVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + + @Override + public RestResponse update(AccessKeyVO accessKeyVO) { + int i_ret = accessKeyMapper.update(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + @Override + public RestResponse delete(AccessKeyVO accessKeyVO) { + int i_ret = accessKeyMapper.delete(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessTokenServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessTokenServiceImpl.java new file mode 100644 index 0000000..0669af3 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/service/impl/AccessTokenServiceImpl.java @@ -0,0 +1,75 @@ +package com.itn.mjonApi.mjon.api.service.impl; + +import java.time.LocalDateTime; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.service.AccessTokenService; +import com.itn.mjonApi.mjon.api.service.mapper.AccessTokenMapper; + +@Service +public class AccessTokenServiceImpl implements AccessTokenService { + + @Autowired + AccessTokenMapper accessTokenMapper; + + + @Override + public RestResponse findAll() { + List MyMsgListVO = accessTokenMapper.findAll(); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + @Override + public RestResponse insert(AccessKeyVO accessKeyVO) { + int i_ret = accessTokenMapper.insert(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + + @Override + public RestResponse selectR(AccessKeyVO accessKeyVO) { + AccessKeyVO MyMsgListVO = accessTokenMapper.selectR(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + @Override + public RestResponse selectL(AccessKeyVO accessKeyVO) { + List MyMsgListVO = accessTokenMapper.selectL(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + /* + @Override + public AccessKeyVO selectR(AccessKeyVO p_accessKeyVO) { + AccessKeyVO accessKeyVO = accessKeyMapper.selectR(p_accessKeyVO); + return accessKeyVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + */ + + @Override + public AccessKeyVO selectRKey(AccessKeyVO p_accessKeyVO) { + AccessKeyVO accessKeyVO = accessTokenMapper.selectRKey(p_accessKeyVO); + return accessKeyVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + + @Override + public RestResponse update(AccessKeyVO accessKeyVO) { + int i_ret = accessTokenMapper.update(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + @Override + public RestResponse delete(AccessKeyVO accessKeyVO) { + int i_ret = accessTokenMapper.delete(accessKeyVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessKeyMapper.java b/src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessKeyMapper.java new file mode 100644 index 0000000..c3c09b6 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessKeyMapper.java @@ -0,0 +1,25 @@ +package com.itn.mjonApi.mjon.api.service.mapper; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface AccessKeyMapper { + + int insert(AccessKeyVO accessKeyVO); + + AccessKeyVO selectR(AccessKeyVO accessKeyVO); + + List selectL(AccessKeyVO accessKeyVO); + + AccessKeyVO selectRKey(AccessKeyVO accessKeyVO); + + int update(AccessKeyVO accessKeyVO); + + int delete(AccessKeyVO accessKeyVO); + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessTokenMapper.java b/src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessTokenMapper.java new file mode 100644 index 0000000..9cdef10 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/service/mapper/AccessTokenMapper.java @@ -0,0 +1,28 @@ +package com.itn.mjonApi.mjon.api.service.mapper; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +@Mapper +public interface AccessTokenMapper { + + /**/ + List findAll(); + + int insert(AccessKeyVO accessKeyVO); + + AccessKeyVO selectR(AccessKeyVO accessKeyVO); + + List selectL(AccessKeyVO accessKeyVO); + + AccessKeyVO selectRKey(AccessKeyVO accessKeyVO); + + int update(AccessKeyVO accessKeyVO); + + int delete(AccessKeyVO accessKeyVO); + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java new file mode 100644 index 0000000..3958c9b --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java @@ -0,0 +1,263 @@ +package com.itn.mjonApi.mjon.api.web; + +import java.time.LocalDateTime; + +import org.json.simple.JSONObject; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.RestController; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.SendMsgVO; +import com.itn.mjonApi.cmn.msg.PlainResponse; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.service.AccessKeyService; +import com.itn.mjonApi.mjon.api.service.AccessTokenService; + +/** + * @author User + * + * access key( + user_id) 방식의 STEP1 api 구현 + * + */ +@RestController +public class AccessKeyRestController { + + @Autowired + private AccessKeyService accessKeyService; + + @Autowired + private AccessTokenService accessTokenService; + + // + /** + * @param p_name_1 + * @param p_name_2 + * @return + * + * 동일 내용을 1천명(?) 까지 보내기 가능 + * + * grp_id, 결과코드, 결과msg + * + * 3가지 형태로 제공 가능 + * 1.json + * 2.plain text + * + */ + @GetMapping("/api/accessKey/SendMsg") + public ResponseEntity apiaccessKeysendMsg( + @ModelAttribute SendMsgVO sendMsgVO + ){ + //step2.api 처리 + //단문 문자 발송 처리 + + //step3.결과 전달 + System.out.println("name_1"); + System.out.println(sendMsgVO.getAccessKey()); + System.out.println(sendMsgVO.getMberId()); + System.out.println(sendMsgVO.getSender()); + System.out.println(sendMsgVO.getReceiver()); + System.out.println(sendMsgVO.getMsg()); + System.out.println(sendMsgVO.getMsg_type()); + System.out.println(sendMsgVO.getTitle()); + System.out.println(sendMsgVO.getRdate()); + System.out.println(sendMsgVO.getRtime()); + System.out.println(sendMsgVO.getTestmodeYn()); + System.out.println("name_12"); + + //System.out.println(p_name_1); + //System.out.println(p_name_2); + + //sendMsg 문자 발송 전 체크 사항 + //step1.발신자 전화번호 사용 가능 여부 체크(해당 사용자의 기 등록된 번호만 발송 가능) + // 1010 + + //step2.수신자 전화번호 정상 여부 체크(정상 번호에 대해서만 발송 가능) + // 1020 + + //step3.문자 내용 정상 여부 확인 - 스미싱 문구는 발송 안됨 + // 1030 + + //step4.치환명 정상 여부 확인 + // 1040 + + //step5.발송일시 정상여부 확인 + // 1050 + + //step6.문자 타입에 따른 비용 처리 가능 여부 확인 + // 1060 + + return ResponseEntity.ok( + new RestResponse( + HttpStatus.OK + , "" + , LocalDateTime.now() + , "grp100" + ) + ); + + //AccessKeyVO + } + + @GetMapping("/api/accessKey/SendMsgPlain") + public String apiaccessKeysendMsgPlain( + @ModelAttribute SendMsgVO sendMsgVO + ){ + //step2.api 처리 + //단문 문자 발송 처리 + + //step3.결과 전달 + System.out.println("name_1"); + System.out.println(sendMsgVO.getAccessKey()); + System.out.println(sendMsgVO.getMberId()); + System.out.println(sendMsgVO.getSender()); + System.out.println(sendMsgVO.getReceiver()); + System.out.println(sendMsgVO.getMsg()); + System.out.println(sendMsgVO.getMsg_type()); + System.out.println(sendMsgVO.getTitle()); + System.out.println(sendMsgVO.getRdate()); + System.out.println(sendMsgVO.getRtime()); + System.out.println(sendMsgVO.getTestmodeYn()); + System.out.println("name_12"); + + //System.out.println(p_name_1); + //System.out.println(p_name_2); + + //sendMsg 문자 발송 전 체크 사항 + //step1.발신자 전화번호 사용 가능 여부 체크(해당 사용자의 기 등록된 번호만 발송 가능) + // 1010 + + //step2.수신자 전화번호 정상 여부 체크(정상 번호에 대해서만 발송 가능) + // 1020 + + //step3.문자 내용 정상 여부 확인 - 스미싱 문구는 발송 안됨 + // 1030 + + //step4.치환명 정상 여부 확인 + // 1040 + + //step5.발송일시 정상여부 확인 + // 1050 + + //step6.문자 타입에 따른 비용 처리 가능 여부 확인 + // 1060 + + return this.MakePlainResponseResult( + new PlainResponse( + HttpStatus.OK + , "" + , LocalDateTime.now() + ) + , "grp100" + ); + } + + + // + /** + * @param p_name_1 + * @param p_name_2 + * @return + * + * 잔액 확인 + * 2가지 형태로 제공 가능 + * 1.json + * 2.plain text + * + */ + @GetMapping("/api/accessKey/Remain") + public ResponseEntity apiaccessKeysendRemain( + @ModelAttribute SendMsgVO sendMsgVO + ){ + //step2.api 처리 + //단문 문자 발송 처리 + + //step3.결과 전달 + System.out.println("name_1"); + System.out.println(sendMsgVO.getAccessKey()); + System.out.println(sendMsgVO.getMberId()); + System.out.println("name_12"); + + //System.out.println(p_name_1); + //System.out.println(p_name_2); + + //remain 체크 사항 + //step1.잔액 확인 여부 체크 + // 2010 + + JSONObject jsonObject = new JSONObject(); + + jsonObject.put("SMS", "50"); + jsonObject.put("LMS", "30"); + jsonObject.put("MMS", "20"); + + return ResponseEntity.ok( + new RestResponse( + HttpStatus.OK + , "" + , LocalDateTime.now() + , jsonObject + ) + ); + + //AccessKeyVO + } + + // + /** + * @param p_name_1 + * @param p_name_2 + * @return + * + * 잔액 확인 + * + */ + @GetMapping("/api/accessKey/RemainPlain") + public String apiaccessKeysendRemainPlain( + @ModelAttribute SendMsgVO sendMsgVO + ){ + //step2.api 처리 + //단문 문자 발송 처리 + + //step3.결과 전달 + System.out.println("name_1"); + System.out.println(sendMsgVO.getAccessKey()); + System.out.println(sendMsgVO.getMberId()); + System.out.println("name_12"); + + //System.out.println(p_name_1); + //System.out.println(p_name_2); + + //remain 체크 사항 + //step1.잔액 확인 여부 체크 + // 2010 + + return this.MakePlainResponseResult( + new PlainResponse( + HttpStatus.OK + , "" + , LocalDateTime.now() + ) + , "50|30|20" + ); + + //AccessKeyVO + } + + ///////////////////////////////////////////////////////////////////////////////////// + // + // + // private function + // + // + private String MakePlainResponseResult(PlainResponse plainResponse, String p_code) { + String v_ret = ""; + v_ret = Integer.toString(plainResponse.getResultCode()) + + "|" + plainResponse.getMessage() + + "|" + p_code; + + return v_ret; + } +} diff --git a/src/main/java/com/itn/mjonApi/mjon/log/service/LettnLoginLogService.java b/src/main/java/com/itn/mjonApi/mjon/log/service/LettnLoginLogService.java new file mode 100644 index 0000000..46ab367 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/log/service/LettnLoginLogService.java @@ -0,0 +1,30 @@ +package com.itn.mjonApi.mjon.log.service; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.LettnLoginLogVO; +import com.itn.mjonApi.cmn.msg.RestResponse; + +public interface LettnLoginLogService { + + //기본 insert 구문 + RestResponse insert(LettnLoginLogVO lettnLoginLogVO); + + //기본 select R 구문 + RestResponse selectR(LettnLoginLogVO lettnLoginLogVO); + + //기본 select LIST 구문 + RestResponse selectL(LettnLoginLogVO lettnLoginLogVO); + + //AccessKeyVO selectR(AccessKeyVO accessKeyVO); + + //기본 select with key 구문 + LettnLoginLogVO selectRKey(LettnLoginLogVO lettnLoginLogVO); + + //기본 update구문 + RestResponse update(LettnLoginLogVO lettnLoginLogVO); + + //기본 delete 구문 + RestResponse delete(LettnLoginLogVO lettnLoginLogVO); + + //IP 제어 select 구문 + LettnLoginLogVO selectIgnoreIpCnt(LettnLoginLogVO lettnLoginLogVO); +} diff --git a/src/main/java/com/itn/mjonApi/mjon/log/service/impl/LettnLoginLogServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/log/service/impl/LettnLoginLogServiceImpl.java new file mode 100644 index 0000000..276d696 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/log/service/impl/LettnLoginLogServiceImpl.java @@ -0,0 +1,78 @@ +package com.itn.mjonApi.mjon.log.service.impl; + +import java.time.LocalDateTime; +import java.util.List; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Service; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.AccessKeyVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.IdgenVO; +import com.itn.mjonApi.cmn.idgen.mapper.domain.LettnLoginLogVO; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.log.service.LettnLoginLogService; +import com.itn.mjonApi.mjon.log.service.mapper.LettnLoginLogMapper; + +@Service +public class LettnLoginLogServiceImpl implements LettnLoginLogService { + + @Autowired + LettnLoginLogMapper lettnLoginLogMapper; + + + @Override + public RestResponse insert(LettnLoginLogVO lettnLoginLogVO) { + int i_ret = lettnLoginLogMapper.insert(lettnLoginLogVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + + @Override + public RestResponse selectR(LettnLoginLogVO lettnLoginLogVO) { + LettnLoginLogVO MyMsgListVO = lettnLoginLogMapper.selectR(lettnLoginLogVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + @Override + public RestResponse selectL(LettnLoginLogVO lettnLoginLogVO) { + List MyMsgListVO = lettnLoginLogMapper.selectL(lettnLoginLogVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); + } + + /* + @Override + public AccessKeyVO selectR(AccessKeyVO p_accessKeyVO) { + AccessKeyVO accessKeyVO = accessKeyMapper.selectR(p_accessKeyVO); + return accessKeyVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + */ + + @Override + public LettnLoginLogVO selectRKey(LettnLoginLogVO p_lettnLoginLogVO) { + LettnLoginLogVO lettnLoginLogVO = lettnLoginLogMapper.selectRKey(p_lettnLoginLogVO); + return lettnLoginLogVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + + @Override + public RestResponse update(LettnLoginLogVO lettnLoginLogVO) { + int i_ret = lettnLoginLogMapper.update(lettnLoginLogVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + @Override + public RestResponse delete(LettnLoginLogVO lettnLoginLogVO) { + int i_ret = lettnLoginLogMapper.delete(lettnLoginLogVO); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now()); + } + + @Override + public LettnLoginLogVO selectIgnoreIpCnt(LettnLoginLogVO p_lettnLoginLogVO) { + LettnLoginLogVO lettnLoginLogVO = lettnLoginLogMapper.selectIgnoreIpCnt(p_lettnLoginLogVO); + return lettnLoginLogVO; + //return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + } + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/LettnLoginLogMapper.java b/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/LettnLoginLogMapper.java new file mode 100644 index 0000000..f59038f --- /dev/null +++ b/src/main/java/com/itn/mjonApi/mjon/log/service/mapper/LettnLoginLogMapper.java @@ -0,0 +1,27 @@ +package com.itn.mjonApi.mjon.log.service.mapper; + +import java.util.List; + +import org.apache.ibatis.annotations.Mapper; + +import com.itn.mjonApi.cmn.idgen.mapper.domain.LettnLoginLogVO; + +@Mapper +public interface LettnLoginLogMapper { + + int insert(LettnLoginLogVO lettnLoginLogVO); + + LettnLoginLogVO selectR(LettnLoginLogVO lettnLoginLogVO); + + List selectL(LettnLoginLogVO lettnLoginLogVO); + + LettnLoginLogVO selectRKey(LettnLoginLogVO lettnLoginLogVO); + + int update(LettnLoginLogVO lettnLoginLogVO); + + int delete(LettnLoginLogVO lettnLoginLogVO); + + LettnLoginLogVO selectIgnoreIpCnt(LettnLoginLogVO lettnLoginLogVO); + + +} diff --git a/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java b/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java index a174b90..15e5df7 100644 --- a/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java +++ b/src/main/java/com/itn/mjonApi/mjon/member/service/impl/MemberServiceImpl.java @@ -21,12 +21,12 @@ public class MemberServiceImpl implements MemberService { @Override public RestResponse findAll() { List MyMsgListVO = myMsgMapper.findAll(); - return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); } @Override public RestResponse findAll2() { List MyMsgListVO = myMsgMapper.findAll_2(); - return new RestResponse(HttpStatus.OK, "성공", MyMsgListVO, LocalDateTime.now()); + return new RestResponse(HttpStatus.OK, "성공", LocalDateTime.now(), MyMsgListVO); } } diff --git a/src/main/resources/application-dev.properties b/src/main/resources/application-dev.properties index ddfa078..7d69833 100644 --- a/src/main/resources/application-dev.properties +++ b/src/main/resources/application-dev.properties @@ -2,10 +2,14 @@ # DB INFO #spring.datasource.driver-class-name=org.mariadb.jdbc.Driver -spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -spring.datasource.url=jdbc:mysql://192.168.0.125:3306/mjon?serverTimezone=Asia/Seoul +#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +#spring.datasource.url=jdbc:mysql://192.168.0.125:3306/mjon?serverTimezone=Asia/Seoul +spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy +spring.datasource.url=jdbc:log4jdbc:mysql://192.168.0.125:3306/mjon?serverTimezone=Asia/Seoul + spring.datasource.username=mjonUr spring.datasource.password=mjon!@#$ server.port=8088 + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 16235ed..65865d1 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -7,4 +7,10 @@ spring.profiles.active=dev mybatis.mapper-locations=classpath:mapper/**/*.xml # model camel case set mybatis.configuration.map-underscore-to-camel-case=true -logging.level.jdbc.sqlonly=info + +#sql \ucd9c\ub825 log \uc124\uc815 +logging.level.jdbc.sqlonly=off +logging.level.jdbc.sqltiming=info +logging.level.jdbc.audit=off +logging.level.jdbc.resultset=off +logging.level.jdbc.resultsettable=off diff --git a/src/main/resources/log4jdbc.log4j2.properties b/src/main/resources/log4jdbc.log4j2.properties new file mode 100644 index 0000000..a48b3e9 --- /dev/null +++ b/src/main/resources/log4jdbc.log4j2.properties @@ -0,0 +1,2 @@ +log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator +log4jdbc.dump.sql.maxlinelength=0 \ No newline at end of file diff --git a/src/main/resources/mapper/api/AccessKeyMapper.xml b/src/main/resources/mapper/api/AccessKeyMapper.xml new file mode 100644 index 0000000..1155fdc --- /dev/null +++ b/src/main/resources/mapper/api/AccessKeyMapper.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + lettngnrlmber_access_key + + + + + + access_no, + + mber_id, + access_key, + use_yn, + + frst_regist_pnttm, + frst_register_id, + last_updt_pnttm, + last_updusr_id + + + + + + + a.access_no AS accessNo, + + a.mber_id AS mberId, + a.access_key AS accessKey, + a.use_yn AS useYn, + + DATE_FORMAT(a.frst_regist_pnttm,'%Y-%m-%d') AS frstRegistPnttm, + a.frst_register_id AS frstRegisterId, + DATE_FORMAT(a.last_updt_pnttm,'%Y-%m-%d') AS lastUpdtPnttm, + a.last_updusr_id AS lastUpdusrId + + + + + + + + + INSERT INTO ( + + )VALUES( + #{accessNo}, + + #{mberId}, + #{accessKey}, + #{useYn}, + + NOW(), + #{frstRegisterId}, + NOW(), + #{lastUpdusrId} + ) + + + + + + + + + + + + UPDATE + + SET + + LAST_UPDT_PNTTM = NOW() + ,LAST_UPDUSR_ID = #lastUpdusrId# + + + ,mber_id=#{mberId} + + + ,access_key=#{accessKey} + + + ,use_yn=#{useYn} + + + WHERE + ACCESS_NO = #{accessNo} + + + + + DELETE FROM + + WHERE + ACCESS_NO = #{accessNo} + + \ No newline at end of file diff --git a/src/main/resources/mapper/api/AccessTokenMapper.xml b/src/main/resources/mapper/api/AccessTokenMapper.xml new file mode 100644 index 0000000..6fbc2c6 --- /dev/null +++ b/src/main/resources/mapper/api/AccessTokenMapper.xml @@ -0,0 +1,130 @@ + + + + + + + + + + + + lettngnrlmber_access_token + + + + + + access_no, + access_token, + + token_obj, + expire_pnttm, + + frst_regist_pnttm, + frst_register_id, + last_updt_pnttm, + last_updusr_id + + + + + + + a.access_no AS accessNo, + a.access_token AS accessToken, + + a.token_obj AS tokenObj, + a.expire_pnttm AS expirePnttm, + + DATE_FORMAT(a.frst_regist_pnttm,'%Y-%m-%d') AS frstRegistPnttm, + a.frst_register_id AS frstRegisterId, + DATE_FORMAT(a.last_updt_pnttm,'%Y-%m-%d') AS lastUpdtPnttm, + a.last_updusr_id AS lastUpdusrId + + + + + + + + + INSERT INTO ( + + )VALUES( + #{accessNo}, + #{accessToken}, + + #{tokenObj}, + #{expirePnttm}, + + NOW(), + #{frstRegisterId}, + NOW(), + #{lastUpdusrId} + ) + + + + + + + + + + + + UPDATE + + SET + + LAST_UPDT_PNTTM = NOW() + ,LAST_UPDUSR_ID = #lastUpdusrId# + + + ,mber_id=#{mberId} + + + ,access_key=#{accessKey} + + + ,use_yn=#{useYn} + + + WHERE + ACCESS_NO = #{accessNo} + AND ACCESS_TOKEN = #{accessToken} + + + + + DELETE FROM + + WHERE + ACCESS_NO = #{accessNo} + AND ACCESS_TOKEN = #{accessToken} + + \ No newline at end of file diff --git a/src/main/resources/mapper/log/LettnLoginLog.xml b/src/main/resources/mapper/log/LettnLoginLog.xml new file mode 100644 index 0000000..4f7c0e4 --- /dev/null +++ b/src/main/resources/mapper/log/LettnLoginLog.xml @@ -0,0 +1,127 @@ + + + + + + + + + lettnLoginLog + + + + + + LOG_ID + , CONECT_ID + , CONECT_IP + , USER_AT + , DEVICE_TYPE /**인터넷,모바일 */ + , PROGRM_FILE_NM + , MENU_NO + , MENU_NM + , URL + , CREAT_DT + + + + + + a.LOG_ID AS logId + , a.CONECT_ID AS conectId + , a.CONECT_IP AS conectIp + , a.USER_AT AS userAt + , a.DEVICE_TYPE AS deviceType /**인터넷,모바일 */ + , a.PROGRM_FILE_NM AS progrmFileNm + , a.MENU_NO AS menuNo + , a.MENU_NM AS menuNm + , a.URL AS url + , a.CREAT_DT AS creatDt + + + + + + + INSERT INTO ( + + ) + SELECT concat('API_',lpad(ifnull(replace(MAX(log_id),'API_',''),0)+1,16,'0')) + , #{conectId} + , #{conectIp} + , #{userAt} /**A:관리자, U:홈페이지 */ + , #{deviceType} + , #{progrmFileNm} + , #{menuNo} + , #{menuNm} + , #{url} + , now() + + FROM LETTNLOGINLOG + WHERE log_id LIKE 'API_%' + + + + + + + + + + + UPDATE + + SET + + LAST_UPDT_PNTTM = NOW() + ,LAST_UPDUSR_ID = #{lastUpdusrId} + + + ,mber_id=#{mberId} + + + ,access_key=#{accessKey} + + + ,use_yn=#{useYn} + + + WHERE + LOG_ID = #{logId} + + + + + DELETE FROM + + WHERE + LOG_ID = #{logId} + + + + \ No newline at end of file