From acaa27976ebed7ec62552b5bcb68d1a9d3a049f0 Mon Sep 17 00:00:00 2001 From: nhj Date: Thu, 15 Jan 2026 09:40:01 +0900 Subject: [PATCH] =?UTF-8?q?ID/PASS=20=EC=B0=BE=EA=B8=B0=201=EC=B0=A8=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../baseapi/config/Oauth2ResourceConfig.java | 4 +- .../main/controller/MainController.java | 156 +++++++++++++++++- .../urpsys/itmsapi/sys/dao/UserManageDao.java | 5 + .../sys/service/UserManageService.java | 12 ++ .../sqlmap/itms/sys/UserManageMapper.xml | 58 +++++++ 5 files changed, 232 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/urpsys/baseapi/config/Oauth2ResourceConfig.java b/src/main/java/com/urpsys/baseapi/config/Oauth2ResourceConfig.java index 62cf8e94..b2ed45d3 100644 --- a/src/main/java/com/urpsys/baseapi/config/Oauth2ResourceConfig.java +++ b/src/main/java/com/urpsys/baseapi/config/Oauth2ResourceConfig.java @@ -67,7 +67,9 @@ public class Oauth2ResourceConfig extends ResourceServerConfigurerAdapter @Override public void configure(HttpSecurity http) throws Exception { - http.authorizeRequests().mvcMatchers("/sys/LoginLog**" ).permitAll(); // 로그인 이력처리 + http.authorizeRequests().mvcMatchers("/sys/LoginLog**" ).permitAll(); // 로그인 이력처리 + http.authorizeRequests().mvcMatchers("/main/SearchIdFind.do" ).permitAll(); // 2026.01.14 나혁제 ID 찾기 추가 + http.authorizeRequests().mvcMatchers("/main/UserPasswordResetExt.do" ).permitAll(); // 2026.01.14 나혁제 ID 찾기 추가 http.authorizeRequests().anyRequest().authenticated(); } diff --git a/src/main/java/com/urpsys/baseapi/main/controller/MainController.java b/src/main/java/com/urpsys/baseapi/main/controller/MainController.java index 77cf470d..0ae6354d 100644 --- a/src/main/java/com/urpsys/baseapi/main/controller/MainController.java +++ b/src/main/java/com/urpsys/baseapi/main/controller/MainController.java @@ -9,7 +9,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; +import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestBody; @@ -19,9 +21,12 @@ import org.springframework.web.bind.annotation.RestController; import com.urpsys.baseapi.domain.TokenInfo; import com.urpsys.baseapi.common.util.CommonUtil; +import com.urpsys.baseapi.common.util.HtmlEmailUtil; import com.urpsys.baseapi.common.util.ResultData; import com.urpsys.baseapi.main.service.MainMenuManageService; import com.urpsys.itmsapi.bbs.service.BBSAdminManageService; +import com.urpsys.itmsapi.cmm.service.CmmUseService; +import com.urpsys.itmsapi.sys.service.UserManageService; import lombok.extern.slf4j.Slf4j; @@ -54,6 +59,21 @@ public class MainController @Autowired private BBSAdminManageService bbsMngService; + @Autowired + private UserManageService userManageService; // 2026.01.14 나혁제 추가 + + @Autowired + private PasswordEncoder passwordEncoder; // 2026.01.14 나혁제 추가 + + @Autowired + CmmUseService cmmUseService; // 2026.01.14 나혁제 공통코드정보 추출 + + @Autowired + HtmlEmailUtil htmlEmailUtil; // 2026.01.14 나혁제 비밀번호처리 이메일 처리 + + @Value("${custom.front_host_info}") + private String strFrontHostInfo; + /** * Header Page를 조회한다. * @param menuManageVO MenuManageVO @@ -123,8 +143,140 @@ public class MainController log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /main/mainPage.do >>>>>>>>>>>>>>>>>>>>>>>>>"); return ResultData.ok(resBody); - } - + } + + /** + * ID 찾기 + * @author urp 인프라본부 나혁제 + * 작성일 : 2025.01.23 + */ + @ResponseBody + @RequestMapping(value="/main/searchIdFind.do") + public ResponseEntity searchIdFind( @RequestBody LinkedHashMap requestMap + , HttpServletRequest request + , HttpServletResponse response + ) throws Exception + { + log.info("\n\n\n\n\n"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /main/searchIdFind.do <<<<<<<<<<<<<<<<<<<<<<<<<"); + log.info("getRequestURI [{}]", request.getRequestURI() ); + log.info("입력값 확인 requestMap [{}]", requestMap.toString() ); + + LinkedHashMap resBody = new LinkedHashMap(); + + String strUserId = userManageService.selectIdFind(requestMap); + + resBody.put("userId", strUserId); + + log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /main/searchIdFind.do >>>>>>>>>>>>>>>>>>>>>>>>>"); + + return ResultData.ok(resBody); + } + + /** + * 비밀번호 초기화 처리(대외) + * @author urp 인프라본부 나혁제 + * 작성일 : 2026.01.14 + */ + @ResponseBody + @RequestMapping(value="/main/UserPasswordResetExt.do") + public ResponseEntity UserPasswordResetExt( @RequestBody LinkedHashMap requestMap + , HttpServletRequest request + , HttpServletResponse response + ) throws Exception + { + + log.info("\n\n\n\n\n"); + log.info(">>>>>>>>>>>>>>>>>>>>>>>>> /main/UserPasswordResetExt.do <<<<<<<<<<<<<<<<<<<<<<<<<"); + + log.info("getRequestURI [{}]", request.getRequestURI() ); + log.info("입력값 확인 requestMap [{}]", requestMap.toString() ); + + LinkedHashMap resBody = new LinkedHashMap(); + + // 사용자 기본정보 추출 + LinkedHashMap userInfoMap = userManageService.selectUserById(requestMap); + + if(userInfoMap == null) + { + resBody.put("resultCd" , -1 ); + resBody.put("resultMsg", "사용자정보가 존재하지 않습니다." ); + + return ResultData.ok(resBody); + } + else if(CommonUtil.nvl(userInfoMap.get("uniqId")).equals("")) + { + resBody.put("resultCd" , -1 ); + resBody.put("resultMsg", "사용자정보가 존재하지 않습니다." ); + + return ResultData.ok(resBody); + } + else if(CommonUtil.nvl(userInfoMap.get("emplyrNm")).equals("")) + { + resBody.put("resultCd" , -2 ); + resBody.put("resultMsg", "사용자명이 존재하지 않습니다." ); + + return ResultData.ok(resBody); + } + else if(!CommonUtil.nvl(userInfoMap.get("emplyrNm")).equals(requestMap.get("userNm"))) + { + resBody.put("resultCd" , -3 ); + resBody.put("resultMsg", "사용자정보가 일치하지 않습니다." ); + + return ResultData.ok(resBody); + } + else if(CommonUtil.nvl(userInfoMap.get("emailAdres")).equals("")) + { + resBody.put("resultCd" , -4 ); + resBody.put("resultMsg", "E-mail 이 존재하지 않습니다." ); + + return ResultData.ok(resBody); + } + else if(!CommonUtil.nvl(userInfoMap.get("emailAdres")).equals(requestMap.get("userEmail"))) + { + resBody.put("resultCd" , -5 ); + resBody.put("resultMsg", "사용자정보가 일치하지 않습니다." ); + + return ResultData.ok(resBody); + } + + String strResetPassword = CommonUtil.getRandomChar(10); + + log.info("새로운 비밀번호 [{}]", strResetPassword ); + log.info("새로운 비밀번호 [{}]", passwordEncoder.encode(strResetPassword) ); + + requestMap.put("pwd", passwordEncoder.encode(strResetPassword)); + + int iResult = userManageService.updatePasswordReset(requestMap); + + // 템플릿 조회 + LinkedHashMap inCodeMap = new LinkedHashMap(); + inCodeMap.put("codeId", "SM_003"); + inCodeMap.put("cd", "3"); + LinkedHashMap outEmailCodeMap = cmmUseService.selectCmmCodeDetailAsCd(inCodeMap); + + String strMailTemplet = (String)outEmailCodeMap.get("dtlTpl"); + + String strMailMsg = strMailTemplet; + + strMailMsg = strMailMsg.replace("#{value10}", CommonUtil.nvl(userInfoMap.get("emplyrNm")) ); // 이름 + strMailMsg = strMailMsg.replace("#{value02}", strResetPassword ); // 비밀번호 + strMailMsg = strMailMsg.replace("#{value20}", strFrontHostInfo ); + + htmlEmailUtil.SendAlarmInsert( CommonUtil.nvl(userInfoMap.get("emailAdres")) + , "비밀번호초기화" + , strMailMsg + , CommonUtil.nvl(userInfoMap.get("uniqId")) + , "1"); + + resBody.put("resultCd" , 0 ); + resBody.put("resultMsg", "정상적으로 처리되었습니다. " ); + + log.info("<<<<<<<<<<<<<<<<<<<<<<<<< /main/UserPasswordResetExt.do >>>>>>>>>>>>>>>>>>>>>>>>>"); + + return ResultData.ok(resBody); + } + diff --git a/src/main/java/com/urpsys/itmsapi/sys/dao/UserManageDao.java b/src/main/java/com/urpsys/itmsapi/sys/dao/UserManageDao.java index fc3690cc..cf853edc 100644 --- a/src/main/java/com/urpsys/itmsapi/sys/dao/UserManageDao.java +++ b/src/main/java/com/urpsys/itmsapi/sys/dao/UserManageDao.java @@ -63,7 +63,12 @@ public interface UserManageDao // 패스워드 초기화 public int updatePasswordReset(LinkedHashMap inMap) throws Exception; + // 2026.01.14 ID 찾기 + public String selectIdFind(LinkedHashMap inMap) throws Exception; + // 2026.01.14 나혁제 ID 로 사용자정보 조회 + public LinkedHashMap selectUserById(LinkedHashMap inMap) throws Exception; + diff --git a/src/main/java/com/urpsys/itmsapi/sys/service/UserManageService.java b/src/main/java/com/urpsys/itmsapi/sys/service/UserManageService.java index d4ed5399..6ddab287 100644 --- a/src/main/java/com/urpsys/itmsapi/sys/service/UserManageService.java +++ b/src/main/java/com/urpsys/itmsapi/sys/service/UserManageService.java @@ -143,6 +143,18 @@ public class UserManageService { return userManageDao.updatePasswordReset(inMap); } + + // 2026.01.14 ID 찾기 + public String selectIdFind(LinkedHashMap inMap) throws Exception + { + return userManageDao.selectIdFind(inMap); + } + + // 2026.01.14 나혁제 ID 로 사용자정보 조회 + public LinkedHashMap selectUserById(LinkedHashMap inMap) throws Exception + { + return userManageDao.selectUserById(inMap); + } diff --git a/src/main/resources/mapper/primarydb/sqlmap/itms/sys/UserManageMapper.xml b/src/main/resources/mapper/primarydb/sqlmap/itms/sys/UserManageMapper.xml index f1d223a2..6c49fb0e 100644 --- a/src/main/resources/mapper/primarydb/sqlmap/itms/sys/UserManageMapper.xml +++ b/src/main/resources/mapper/primarydb/sqlmap/itms/sys/UserManageMapper.xml @@ -331,6 +331,64 @@ + + + + + + + + UPDATE TB_TASK_USER_INFO SET LOCK_AT = NULL