박민혁 박민혁 07-15
250715 박민혁 아이디 / 비밀번호 찾기 (이메일 & 휴대폰 인증 제외)
@8995873f3dad7803869a7fcf7fdd2038e5f02f4d
src/main/java/kr/co/takensoft/ai/system/auth/dao/AuthDAO.java
--- src/main/java/kr/co/takensoft/ai/system/auth/dao/AuthDAO.java
+++ src/main/java/kr/co/takensoft/ai/system/auth/dao/AuthDAO.java
@@ -1,5 +1,7 @@
 package kr.co.takensoft.ai.system.auth.dao;
 
+import kr.co.takensoft.ai.system.auth.dto.LoginDTO;
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO;
 import kr.co.takensoft.ai.system.auth.vo.MemberVO;
 import org.egovframe.rte.psl.dataaccess.mapper.Mapper;
 
@@ -11,6 +13,7 @@
  * @modification
  *     since    |    author    | description
  *  2025.07.03  |  박민혁       | 최초 등록
+ *  2025.07.15  |     박민혁    | 아이디 / 비밀번호 찾기 관련 메서드 추가
  *
  * 사용자 정보 관련 DAO
  */
@@ -48,4 +51,38 @@
      * 사용자 정보 개인 정보 조회
      */
     int checkMemberEmail(String email) throws Exception;
+
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return  발송 여부
+     *
+     * 이름, 이메일 혹은 전화번호로 아이디 찾기
+     */
+    int findMemberId(VertifyDTO vertifyDTO) throws Exception;
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return 로그인 아이디
+     *
+     * 이름, 아이디, 이메일 혹은 전화번호로 아이디 확인
+     */
+    String findMemberLoginId(VertifyDTO vertifyDTO) throws Exception;
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return  발송 여부
+     *
+     * 이름, 아이디, 이메일 혹은 전화번호로 비밀번호 찾기
+     */
+    int findMemberPassword(VertifyDTO vertifyDTO) throws Exception;
+
+    /**
+     * @param loginDTO 새로운 비밀번호와 아이디
+     * @return 변경 성공 여부
+     *
+     * 비밀번호 변경
+     */
+    int updateMemberPassword(LoginDTO loginDTO) throws Exception;
+
 }
src/main/java/kr/co/takensoft/ai/system/auth/dto/LoginDTO.java
--- src/main/java/kr/co/takensoft/ai/system/auth/dto/LoginDTO.java
+++ src/main/java/kr/co/takensoft/ai/system/auth/dto/LoginDTO.java
@@ -20,4 +20,5 @@
     private String loginId; // 로그인 아이디
     @NotNull
     private String password; // 비밀번호
+    private String salt; // 솔트
 }
 
src/main/java/kr/co/takensoft/ai/system/auth/dto/VertifyDTO.java (added)
+++ src/main/java/kr/co/takensoft/ai/system/auth/dto/VertifyDTO.java
@@ -0,0 +1,25 @@
+package kr.co.takensoft.ai.system.auth.dto;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author  : 박민혁
+ * @since   : 2025.07.15
+ * @modification
+ *     since    |    author    | description
+ *  2025.07.15  |  박민혁       | 최초 등록
+ *
+ * 이메일 인증용 DTO
+ */
+@Setter
+@Getter
+public class VertifyDTO {
+    private String loginId; // 로그인 아이디
+    private String email; // 이메일
+    private String phoneNumber; // 전화번호
+    private String type; // 이메일인지 전화번호인지
+    @NotNull
+    private String memberName; // 사용자 이름
+}
src/main/java/kr/co/takensoft/ai/system/auth/service/AuthService.java
--- src/main/java/kr/co/takensoft/ai/system/auth/service/AuthService.java
+++ src/main/java/kr/co/takensoft/ai/system/auth/service/AuthService.java
@@ -1,6 +1,7 @@
 package kr.co.takensoft.ai.system.auth.service;
 
 import kr.co.takensoft.ai.system.auth.dto.LoginDTO;
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO;
 import kr.co.takensoft.ai.system.auth.vo.MemberVO;
 
 import java.util.Map;
@@ -11,6 +12,7 @@
  * @modification
  *      since   |    author    | description
  *  2025.07.08  |     박민혁    | 최초 등록
+ *  2025.07.15  |     박민혁    | 아이디 / 비밀번호 찾기 관련 메서드 추가
  *
  * 사용자 정보 관련 서비스
  */
@@ -54,4 +56,37 @@
      * 사용자 정보 개인 정보 조회
      */
     int checkMemberEmail(String email) throws Exception;
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return 아이디 존재 여부
+     *
+     * 이름, 아이디, 이메일 혹은 전화번호로 아이디 찾기
+     */
+    int findMemberId(VertifyDTO vertifyDTO) throws Exception;
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return 로그인 아이디
+     *
+     * 이름, 아이디, 이메일 혹은 전화번호로 아이디 확인
+     */
+    String findMemberLoginId(VertifyDTO vertifyDTO) throws Exception;
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return 발송 여부
+     *
+     * 이름, 아이디, 이메일 혹은 전화번호로 비밀번호 찾기
+     */
+    int findMemberPassword(VertifyDTO vertifyDTO) throws Exception;
+
+    /**
+     * @param loginDTO 아이디와 새로운 비밀번호
+     * @return 변경 성공 여부
+     *
+     * 비밀번호 변경
+     */
+    int updateMemberPassword(LoginDTO loginDTO) throws Exception;
+
 }
src/main/java/kr/co/takensoft/ai/system/auth/service/impl/AuthServiceImpl.java
--- src/main/java/kr/co/takensoft/ai/system/auth/service/impl/AuthServiceImpl.java
+++ src/main/java/kr/co/takensoft/ai/system/auth/service/impl/AuthServiceImpl.java
@@ -6,6 +6,7 @@
  * @modification
  *      since   |    author    | description
  *  2025.07.08  |     박민혁    | 최초 등록
+ *  2025.07.15  |     박민혁    | 아이디 / 비밀번호 찾기 관련 메서드 추가
  *
  * 사용자 정보 관련 서비스
  */
@@ -14,6 +15,7 @@
 import kr.co.takensoft.ai.system.auth.dto.LoginDTO;
 import kr.co.takensoft.ai.system.auth.dto.RefreshTokenDTO;
 import kr.co.takensoft.ai.system.auth.dto.TokenDTO;
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO;
 import kr.co.takensoft.ai.system.auth.service.AuthService;
 import kr.co.takensoft.ai.system.auth.vo.MemberVO;
 import kr.co.takensoft.ai.system.common.idgen.service.IdgenService;
@@ -131,4 +133,66 @@
         return authDAO.checkMemberEmail(Secret.encrypt(email));
     }
 
+    /**
+     * @param vertifyDTO 인증용 정보
+     * @return  발송 여부
+     *
+     * 아이디 찾기
+     */
+    public int findMemberId(VertifyDTO vertifyDTO) throws Exception{
+        if(vertifyDTO.getType().equals("email")){
+            vertifyDTO.setEmail(Secret.encrypt(vertifyDTO.getEmail()));
+        }
+        else if(vertifyDTO.getType().equals("phone")){
+            vertifyDTO.setPhoneNumber(Secret.encrypt(vertifyDTO.getPhoneNumber()));
+        }
+        return authDAO.findMemberId(vertifyDTO);
+    }
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return 로그인 아이디
+     *
+     * 이름, 아이디, 이메일 혹은 전화번호로 아이디 확인
+     */
+    public String findMemberLoginId(VertifyDTO vertifyDTO) throws Exception{
+        if(vertifyDTO.getType().equals("email")){
+            vertifyDTO.setEmail(Secret.encrypt(vertifyDTO.getEmail()));
+        }
+        else if(vertifyDTO.getType().equals("phone")){
+            vertifyDTO.setPhoneNumber(Secret.encrypt(vertifyDTO.getPhoneNumber()));
+        }
+        return authDAO.findMemberLoginId(vertifyDTO);
+    }
+
+    /**
+     * @param vertifyDTO 인증용 정보
+     * @return  발송 여부
+     *
+     * 비밀번호 찾기
+     */
+    public int findMemberPassword(VertifyDTO vertifyDTO) throws Exception{
+        if(vertifyDTO.getType().equals("email")){
+            vertifyDTO.setEmail(Secret.encrypt(vertifyDTO.getEmail()));
+        }
+        else if(vertifyDTO.getType().equals("phone")){
+            vertifyDTO.setPhoneNumber(Secret.encrypt(vertifyDTO.getPhoneNumber()));
+        }
+        return authDAO.findMemberPassword(vertifyDTO);
+    }
+
+    /**
+     * @param loginDTO 새로운 비밀번호와 비밀번호 바꾸는 아이디
+     * @return 변경 성공 여부
+     *
+     * 비밀번호 변경
+     */
+    public int updateMemberPassword(LoginDTO loginDTO) throws Exception{
+        String salt = PasswordEncryptor.generateSalt(); // 비밀번호 솔트 생성
+        String hashedPassword = PasswordEncryptor.sha256EncryptWithSalt(loginDTO.getPassword(), salt, ITERATIONS); // 비밀번호 SHA256 암호화
+
+        loginDTO.setPassword(hashedPassword);
+        loginDTO.setSalt(salt); // 비밀번호 솔트 저장
+        return authDAO.updateMemberPassword(loginDTO);
+    }
 }
src/main/java/kr/co/takensoft/ai/system/auth/web/AuthController.java
--- src/main/java/kr/co/takensoft/ai/system/auth/web/AuthController.java
+++ src/main/java/kr/co/takensoft/ai/system/auth/web/AuthController.java
@@ -5,6 +5,7 @@
 import jakarta.servlet.http.HttpServletResponse;
 import kr.co.takensoft.ai.system.auth.dao.RefreshDAO;
 import kr.co.takensoft.ai.system.auth.dto.LoginDTO;
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO;
 import kr.co.takensoft.ai.system.auth.service.AuthService;
 import kr.co.takensoft.ai.system.auth.service.RefreshService;
 import kr.co.takensoft.ai.system.auth.vo.MemberVO;
@@ -23,6 +24,7 @@
  * @modification
  *      since   |    author    | description
  *  2025.07.08  |     박민혁    | 최초 등록
+ *  2025.07.15  |     박민혁    | 아이디 / 비밀번호 찾기 관련 메서드 추가
  *
  * 사용자 정보 관련 서비스
  */
@@ -138,4 +140,56 @@
         result.put("result", authService.checkMemberEmail(email));
         return new ResponseEntity<>(result, HttpStatus.OK);
     }
+
+    /**
+     * @param vertifyDTO 인증용 정보
+     * @return  발송 여부
+     *
+     * 아이디 찾기
+     */
+    @PostMapping("/findId.json")
+    public ResponseEntity<?> findMemberId(@RequestBody VertifyDTO vertifyDTO) throws Exception{
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("result", authService.findMemberId(vertifyDTO));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    /**
+     * @param vertifyDTO 인증용 정보
+     * @return  로그인 아이디
+     *
+     * 아이디 가져오기
+     */
+    @PostMapping("/findLoginId.json")
+    public ResponseEntity<?> findMemberLoginId(@RequestBody VertifyDTO vertifyDTO) throws Exception{
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("result", authService.findMemberLoginId(vertifyDTO));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    /**
+     * @param vertifyDTO 이메일 인증용 정보
+     * @return 이메일 발송 여부
+     *
+     * 비밀번호 찾기
+     */
+    @PostMapping("/findPassword.json")
+    public ResponseEntity<?> findMemberPassword(@RequestBody VertifyDTO vertifyDTO) throws Exception{
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("result", authService.findMemberPassword(vertifyDTO));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
+
+    /**
+     * @param loginDTO 새로운 비밀번호와 비밀번호 바꾸는 아이디
+     * @return 변경 성공 여부
+     *
+     * 비밀번호 변경
+     */
+    @PostMapping("/updatePassword.json")
+    public ResponseEntity<?> updateMemberPassword(@RequestBody LoginDTO loginDTO) throws Exception{
+        HashMap<String, Object> result = new HashMap<>();
+        result.put("result", authService.updateMemberPassword(loginDTO));
+        return new ResponseEntity<>(result, HttpStatus.OK);
+    }
 }
(No newline at end of file)
src/main/resources/mybatis/mapper/auth/auth-SQL.xml
--- src/main/resources/mybatis/mapper/auth/auth-SQL.xml
+++ src/main/resources/mybatis/mapper/auth/auth-SQL.xml
@@ -70,4 +70,73 @@
         where email = #{email}
     </select>
 
+    <!--
+        작 성 자 : 박민혁
+        작 성 일 : 2025.07.15
+        내    용 : 아이디 찾기 인증용 SQL
+    -->
+    <select id="findMemberId" resultType="int">
+        select
+            count(*)
+        from member
+        where member_name = #{memberName}
+        <if test="type == 'email'">
+            AND email = #{email}
+        </if>
+        <if test="type == 'phone'">
+            AND phone_number = #{phoneNumber}
+        </if>
+    </select>
+
+    <!--
+        작 성 자 : 박민혁
+        작 성 일 : 2025.07.15
+        내    용 : 아이디 찾기
+    -->
+    <select id="findMemberLoginId">
+        select
+            login_id
+        from member
+        where member_name = #{memberName}
+        <if test="type == 'email'">
+            AND email = #{email}
+        </if>
+        <if test="type == 'phone'">
+            AND phone_number = #{phoneNumber}
+        </if>
+    </select>
+
+    <!--
+        작 성 자 : 박민혁
+        작 성 일 : 2025.07.15
+        내    용 : 비밀번호 찾기 인증용 SQL
+    -->
+    <select id="findMemberPassword" resultType="int">
+        select
+            count(*)
+        from member
+        where member_name = #{memberName}
+        AND login_id = #{loginId}
+        <if test="type == 'email'">
+            AND email = #{email}
+        </if>
+        <if test="type == 'phone'">
+            AND phone_number = #{phoneNumber}
+        </if>
+    </select>
+
+    <!--
+        작 성 자 : 박민혁
+        작 성 일 : 2025.07.15
+        내    용 : 비밀 번호 변경
+    -->
+    <update id="updateMemberPassword" >
+        update
+            member
+        SET
+            password = #{password},
+            salt = #{salt}
+        WHERE
+            login_id = #{loginId}
+    </update>
 </mapper>
(No newline at end of file)
Add a comment
List