
--- 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 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.auth.dao; |
2 | 2 |
|
3 |
+import kr.co.takensoft.ai.system.auth.dto.LoginDTO; |
|
4 |
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO; |
|
3 | 5 |
import kr.co.takensoft.ai.system.auth.vo.MemberVO; |
4 | 6 |
import org.egovframe.rte.psl.dataaccess.mapper.Mapper; |
5 | 7 |
|
... | ... | @@ -11,6 +13,7 @@ |
11 | 13 |
* @modification |
12 | 14 |
* since | author | description |
13 | 15 |
* 2025.07.03 | 박민혁 | 최초 등록 |
16 |
+ * 2025.07.15 | 박민혁 | 아이디 / 비밀번호 찾기 관련 메서드 추가 |
|
14 | 17 |
* |
15 | 18 |
* 사용자 정보 관련 DAO |
16 | 19 |
*/ |
... | ... | @@ -48,4 +51,38 @@ |
48 | 51 |
* 사용자 정보 개인 정보 조회 |
49 | 52 |
*/ |
50 | 53 |
int checkMemberEmail(String email) throws Exception; |
54 |
+ |
|
55 |
+ |
|
56 |
+ /** |
|
57 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
58 |
+ * @return 발송 여부 |
|
59 |
+ * |
|
60 |
+ * 이름, 이메일 혹은 전화번호로 아이디 찾기 |
|
61 |
+ */ |
|
62 |
+ int findMemberId(VertifyDTO vertifyDTO) throws Exception; |
|
63 |
+ |
|
64 |
+ /** |
|
65 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
66 |
+ * @return 로그인 아이디 |
|
67 |
+ * |
|
68 |
+ * 이름, 아이디, 이메일 혹은 전화번호로 아이디 확인 |
|
69 |
+ */ |
|
70 |
+ String findMemberLoginId(VertifyDTO vertifyDTO) throws Exception; |
|
71 |
+ |
|
72 |
+ /** |
|
73 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
74 |
+ * @return 발송 여부 |
|
75 |
+ * |
|
76 |
+ * 이름, 아이디, 이메일 혹은 전화번호로 비밀번호 찾기 |
|
77 |
+ */ |
|
78 |
+ int findMemberPassword(VertifyDTO vertifyDTO) throws Exception; |
|
79 |
+ |
|
80 |
+ /** |
|
81 |
+ * @param loginDTO 새로운 비밀번호와 아이디 |
|
82 |
+ * @return 변경 성공 여부 |
|
83 |
+ * |
|
84 |
+ * 비밀번호 변경 |
|
85 |
+ */ |
|
86 |
+ int updateMemberPassword(LoginDTO loginDTO) throws Exception; |
|
87 |
+ |
|
51 | 88 |
} |
--- 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 @@ |
20 | 20 |
private String loginId; // 로그인 아이디 |
21 | 21 |
@NotNull |
22 | 22 |
private String password; // 비밀번호 |
23 |
+ private String salt; // 솔트 |
|
23 | 24 |
} |
+++ src/main/java/kr/co/takensoft/ai/system/auth/dto/VertifyDTO.java
... | ... | @@ -0,0 +1,25 @@ |
1 | +package kr.co.takensoft.ai.system.auth.dto; | |
2 | + | |
3 | +import jakarta.validation.constraints.NotNull; | |
4 | +import lombok.Getter; | |
5 | +import lombok.Setter; | |
6 | + | |
7 | +/** | |
8 | + * @author : 박민혁 | |
9 | + * @since : 2025.07.15 | |
10 | + * @modification | |
11 | + * since | author | description | |
12 | + * 2025.07.15 | 박민혁 | 최초 등록 | |
13 | + * | |
14 | + * 이메일 인증용 DTO | |
15 | + */ | |
16 | +@Setter | |
17 | +@Getter | |
18 | +public class VertifyDTO { | |
19 | + private String loginId; // 로그인 아이디 | |
20 | + private String email; // 이메일 | |
21 | + private String phoneNumber; // 전화번호 | |
22 | + private String type; // 이메일인지 전화번호인지 | |
23 | + @NotNull | |
24 | + private String memberName; // 사용자 이름 | |
25 | +} |
--- 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 @@ |
1 | 1 |
package kr.co.takensoft.ai.system.auth.service; |
2 | 2 |
|
3 | 3 |
import kr.co.takensoft.ai.system.auth.dto.LoginDTO; |
4 |
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO; |
|
4 | 5 |
import kr.co.takensoft.ai.system.auth.vo.MemberVO; |
5 | 6 |
|
6 | 7 |
import java.util.Map; |
... | ... | @@ -11,6 +12,7 @@ |
11 | 12 |
* @modification |
12 | 13 |
* since | author | description |
13 | 14 |
* 2025.07.08 | 박민혁 | 최초 등록 |
15 |
+ * 2025.07.15 | 박민혁 | 아이디 / 비밀번호 찾기 관련 메서드 추가 |
|
14 | 16 |
* |
15 | 17 |
* 사용자 정보 관련 서비스 |
16 | 18 |
*/ |
... | ... | @@ -54,4 +56,37 @@ |
54 | 56 |
* 사용자 정보 개인 정보 조회 |
55 | 57 |
*/ |
56 | 58 |
int checkMemberEmail(String email) throws Exception; |
59 |
+ |
|
60 |
+ /** |
|
61 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
62 |
+ * @return 아이디 존재 여부 |
|
63 |
+ * |
|
64 |
+ * 이름, 아이디, 이메일 혹은 전화번호로 아이디 찾기 |
|
65 |
+ */ |
|
66 |
+ int findMemberId(VertifyDTO vertifyDTO) throws Exception; |
|
67 |
+ |
|
68 |
+ /** |
|
69 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
70 |
+ * @return 로그인 아이디 |
|
71 |
+ * |
|
72 |
+ * 이름, 아이디, 이메일 혹은 전화번호로 아이디 확인 |
|
73 |
+ */ |
|
74 |
+ String findMemberLoginId(VertifyDTO vertifyDTO) throws Exception; |
|
75 |
+ |
|
76 |
+ /** |
|
77 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
78 |
+ * @return 발송 여부 |
|
79 |
+ * |
|
80 |
+ * 이름, 아이디, 이메일 혹은 전화번호로 비밀번호 찾기 |
|
81 |
+ */ |
|
82 |
+ int findMemberPassword(VertifyDTO vertifyDTO) throws Exception; |
|
83 |
+ |
|
84 |
+ /** |
|
85 |
+ * @param loginDTO 아이디와 새로운 비밀번호 |
|
86 |
+ * @return 변경 성공 여부 |
|
87 |
+ * |
|
88 |
+ * 비밀번호 변경 |
|
89 |
+ */ |
|
90 |
+ int updateMemberPassword(LoginDTO loginDTO) throws Exception; |
|
91 |
+ |
|
57 | 92 |
} |
--- 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 @@ |
6 | 6 |
* @modification |
7 | 7 |
* since | author | description |
8 | 8 |
* 2025.07.08 | 박민혁 | 최초 등록 |
9 |
+ * 2025.07.15 | 박민혁 | 아이디 / 비밀번호 찾기 관련 메서드 추가 |
|
9 | 10 |
* |
10 | 11 |
* 사용자 정보 관련 서비스 |
11 | 12 |
*/ |
... | ... | @@ -14,6 +15,7 @@ |
14 | 15 |
import kr.co.takensoft.ai.system.auth.dto.LoginDTO; |
15 | 16 |
import kr.co.takensoft.ai.system.auth.dto.RefreshTokenDTO; |
16 | 17 |
import kr.co.takensoft.ai.system.auth.dto.TokenDTO; |
18 |
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO; |
|
17 | 19 |
import kr.co.takensoft.ai.system.auth.service.AuthService; |
18 | 20 |
import kr.co.takensoft.ai.system.auth.vo.MemberVO; |
19 | 21 |
import kr.co.takensoft.ai.system.common.idgen.service.IdgenService; |
... | ... | @@ -131,4 +133,66 @@ |
131 | 133 |
return authDAO.checkMemberEmail(Secret.encrypt(email)); |
132 | 134 |
} |
133 | 135 |
|
136 |
+ /** |
|
137 |
+ * @param vertifyDTO 인증용 정보 |
|
138 |
+ * @return 발송 여부 |
|
139 |
+ * |
|
140 |
+ * 아이디 찾기 |
|
141 |
+ */ |
|
142 |
+ public int findMemberId(VertifyDTO vertifyDTO) throws Exception{ |
|
143 |
+ if(vertifyDTO.getType().equals("email")){ |
|
144 |
+ vertifyDTO.setEmail(Secret.encrypt(vertifyDTO.getEmail())); |
|
145 |
+ } |
|
146 |
+ else if(vertifyDTO.getType().equals("phone")){ |
|
147 |
+ vertifyDTO.setPhoneNumber(Secret.encrypt(vertifyDTO.getPhoneNumber())); |
|
148 |
+ } |
|
149 |
+ return authDAO.findMemberId(vertifyDTO); |
|
150 |
+ } |
|
151 |
+ |
|
152 |
+ /** |
|
153 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
154 |
+ * @return 로그인 아이디 |
|
155 |
+ * |
|
156 |
+ * 이름, 아이디, 이메일 혹은 전화번호로 아이디 확인 |
|
157 |
+ */ |
|
158 |
+ public String findMemberLoginId(VertifyDTO vertifyDTO) throws Exception{ |
|
159 |
+ if(vertifyDTO.getType().equals("email")){ |
|
160 |
+ vertifyDTO.setEmail(Secret.encrypt(vertifyDTO.getEmail())); |
|
161 |
+ } |
|
162 |
+ else if(vertifyDTO.getType().equals("phone")){ |
|
163 |
+ vertifyDTO.setPhoneNumber(Secret.encrypt(vertifyDTO.getPhoneNumber())); |
|
164 |
+ } |
|
165 |
+ return authDAO.findMemberLoginId(vertifyDTO); |
|
166 |
+ } |
|
167 |
+ |
|
168 |
+ /** |
|
169 |
+ * @param vertifyDTO 인증용 정보 |
|
170 |
+ * @return 발송 여부 |
|
171 |
+ * |
|
172 |
+ * 비밀번호 찾기 |
|
173 |
+ */ |
|
174 |
+ public int findMemberPassword(VertifyDTO vertifyDTO) throws Exception{ |
|
175 |
+ if(vertifyDTO.getType().equals("email")){ |
|
176 |
+ vertifyDTO.setEmail(Secret.encrypt(vertifyDTO.getEmail())); |
|
177 |
+ } |
|
178 |
+ else if(vertifyDTO.getType().equals("phone")){ |
|
179 |
+ vertifyDTO.setPhoneNumber(Secret.encrypt(vertifyDTO.getPhoneNumber())); |
|
180 |
+ } |
|
181 |
+ return authDAO.findMemberPassword(vertifyDTO); |
|
182 |
+ } |
|
183 |
+ |
|
184 |
+ /** |
|
185 |
+ * @param loginDTO 새로운 비밀번호와 비밀번호 바꾸는 아이디 |
|
186 |
+ * @return 변경 성공 여부 |
|
187 |
+ * |
|
188 |
+ * 비밀번호 변경 |
|
189 |
+ */ |
|
190 |
+ public int updateMemberPassword(LoginDTO loginDTO) throws Exception{ |
|
191 |
+ String salt = PasswordEncryptor.generateSalt(); // 비밀번호 솔트 생성 |
|
192 |
+ String hashedPassword = PasswordEncryptor.sha256EncryptWithSalt(loginDTO.getPassword(), salt, ITERATIONS); // 비밀번호 SHA256 암호화 |
|
193 |
+ |
|
194 |
+ loginDTO.setPassword(hashedPassword); |
|
195 |
+ loginDTO.setSalt(salt); // 비밀번호 솔트 저장 |
|
196 |
+ return authDAO.updateMemberPassword(loginDTO); |
|
197 |
+ } |
|
134 | 198 |
} |
--- 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 @@ |
5 | 5 |
import jakarta.servlet.http.HttpServletResponse; |
6 | 6 |
import kr.co.takensoft.ai.system.auth.dao.RefreshDAO; |
7 | 7 |
import kr.co.takensoft.ai.system.auth.dto.LoginDTO; |
8 |
+import kr.co.takensoft.ai.system.auth.dto.VertifyDTO; |
|
8 | 9 |
import kr.co.takensoft.ai.system.auth.service.AuthService; |
9 | 10 |
import kr.co.takensoft.ai.system.auth.service.RefreshService; |
10 | 11 |
import kr.co.takensoft.ai.system.auth.vo.MemberVO; |
... | ... | @@ -23,6 +24,7 @@ |
23 | 24 |
* @modification |
24 | 25 |
* since | author | description |
25 | 26 |
* 2025.07.08 | 박민혁 | 최초 등록 |
27 |
+ * 2025.07.15 | 박민혁 | 아이디 / 비밀번호 찾기 관련 메서드 추가 |
|
26 | 28 |
* |
27 | 29 |
* 사용자 정보 관련 서비스 |
28 | 30 |
*/ |
... | ... | @@ -138,4 +140,56 @@ |
138 | 140 |
result.put("result", authService.checkMemberEmail(email)); |
139 | 141 |
return new ResponseEntity<>(result, HttpStatus.OK); |
140 | 142 |
} |
143 |
+ |
|
144 |
+ /** |
|
145 |
+ * @param vertifyDTO 인증용 정보 |
|
146 |
+ * @return 발송 여부 |
|
147 |
+ * |
|
148 |
+ * 아이디 찾기 |
|
149 |
+ */ |
|
150 |
+ @PostMapping("/findId.json") |
|
151 |
+ public ResponseEntity<?> findMemberId(@RequestBody VertifyDTO vertifyDTO) throws Exception{ |
|
152 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
153 |
+ result.put("result", authService.findMemberId(vertifyDTO)); |
|
154 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
155 |
+ } |
|
156 |
+ |
|
157 |
+ /** |
|
158 |
+ * @param vertifyDTO 인증용 정보 |
|
159 |
+ * @return 로그인 아이디 |
|
160 |
+ * |
|
161 |
+ * 아이디 가져오기 |
|
162 |
+ */ |
|
163 |
+ @PostMapping("/findLoginId.json") |
|
164 |
+ public ResponseEntity<?> findMemberLoginId(@RequestBody VertifyDTO vertifyDTO) throws Exception{ |
|
165 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
166 |
+ result.put("result", authService.findMemberLoginId(vertifyDTO)); |
|
167 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
168 |
+ } |
|
169 |
+ |
|
170 |
+ /** |
|
171 |
+ * @param vertifyDTO 이메일 인증용 정보 |
|
172 |
+ * @return 이메일 발송 여부 |
|
173 |
+ * |
|
174 |
+ * 비밀번호 찾기 |
|
175 |
+ */ |
|
176 |
+ @PostMapping("/findPassword.json") |
|
177 |
+ public ResponseEntity<?> findMemberPassword(@RequestBody VertifyDTO vertifyDTO) throws Exception{ |
|
178 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
179 |
+ result.put("result", authService.findMemberPassword(vertifyDTO)); |
|
180 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
181 |
+ } |
|
182 |
+ |
|
183 |
+ /** |
|
184 |
+ * @param loginDTO 새로운 비밀번호와 비밀번호 바꾸는 아이디 |
|
185 |
+ * @return 변경 성공 여부 |
|
186 |
+ * |
|
187 |
+ * 비밀번호 변경 |
|
188 |
+ */ |
|
189 |
+ @PostMapping("/updatePassword.json") |
|
190 |
+ public ResponseEntity<?> updateMemberPassword(@RequestBody LoginDTO loginDTO) throws Exception{ |
|
191 |
+ HashMap<String, Object> result = new HashMap<>(); |
|
192 |
+ result.put("result", authService.updateMemberPassword(loginDTO)); |
|
193 |
+ return new ResponseEntity<>(result, HttpStatus.OK); |
|
194 |
+ } |
|
141 | 195 |
}(No newline at end of file) |
--- src/main/resources/mybatis/mapper/auth/auth-SQL.xml
+++ src/main/resources/mybatis/mapper/auth/auth-SQL.xml
... | ... | @@ -70,4 +70,73 @@ |
70 | 70 |
where email = #{email} |
71 | 71 |
</select> |
72 | 72 |
|
73 |
+ <!-- |
|
74 |
+ 작 성 자 : 박민혁 |
|
75 |
+ 작 성 일 : 2025.07.15 |
|
76 |
+ 내 용 : 아이디 찾기 인증용 SQL |
|
77 |
+ --> |
|
78 |
+ <select id="findMemberId" resultType="int"> |
|
79 |
+ select |
|
80 |
+ count(*) |
|
81 |
+ from member |
|
82 |
+ where member_name = #{memberName} |
|
83 |
+ <if test="type == 'email'"> |
|
84 |
+ AND email = #{email} |
|
85 |
+ </if> |
|
86 |
+ <if test="type == 'phone'"> |
|
87 |
+ AND phone_number = #{phoneNumber} |
|
88 |
+ </if> |
|
89 |
+ </select> |
|
90 |
+ |
|
91 |
+ <!-- |
|
92 |
+ 작 성 자 : 박민혁 |
|
93 |
+ 작 성 일 : 2025.07.15 |
|
94 |
+ 내 용 : 아이디 찾기 |
|
95 |
+ --> |
|
96 |
+ <select id="findMemberLoginId"> |
|
97 |
+ select |
|
98 |
+ login_id |
|
99 |
+ from member |
|
100 |
+ where member_name = #{memberName} |
|
101 |
+ <if test="type == 'email'"> |
|
102 |
+ AND email = #{email} |
|
103 |
+ </if> |
|
104 |
+ <if test="type == 'phone'"> |
|
105 |
+ AND phone_number = #{phoneNumber} |
|
106 |
+ </if> |
|
107 |
+ </select> |
|
108 |
+ |
|
109 |
+ <!-- |
|
110 |
+ 작 성 자 : 박민혁 |
|
111 |
+ 작 성 일 : 2025.07.15 |
|
112 |
+ 내 용 : 비밀번호 찾기 인증용 SQL |
|
113 |
+ --> |
|
114 |
+ <select id="findMemberPassword" resultType="int"> |
|
115 |
+ select |
|
116 |
+ count(*) |
|
117 |
+ from member |
|
118 |
+ where member_name = #{memberName} |
|
119 |
+ AND login_id = #{loginId} |
|
120 |
+ <if test="type == 'email'"> |
|
121 |
+ AND email = #{email} |
|
122 |
+ </if> |
|
123 |
+ <if test="type == 'phone'"> |
|
124 |
+ AND phone_number = #{phoneNumber} |
|
125 |
+ </if> |
|
126 |
+ </select> |
|
127 |
+ |
|
128 |
+ <!-- |
|
129 |
+ 작 성 자 : 박민혁 |
|
130 |
+ 작 성 일 : 2025.07.15 |
|
131 |
+ 내 용 : 비밀 번호 변경 |
|
132 |
+ --> |
|
133 |
+ <update id="updateMemberPassword" > |
|
134 |
+ update |
|
135 |
+ member |
|
136 |
+ SET |
|
137 |
+ password = #{password}, |
|
138 |
+ salt = #{salt} |
|
139 |
+ WHERE |
|
140 |
+ login_id = #{loginId} |
|
141 |
+ </update> |
|
73 | 142 |
</mapper>(No newline at end of file) |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?