🗂️ src/main/java
L 📁 apiPayload
L 📁 config
L 📂 controller
L UserController
L 📂 domain
L 📁 common
L 📁 enums
L User
L 📂 dto
L 📂 request
L NewPasswordDto
L 📁 response
L 📁 jwt
L 📂 repository
L UserRepository
L 📂 service
L UserService
L UserServiceImpl
🗂️ src/main/resources
L application.properties
L application.yml
🐘 build.gradle
SMTP 서버를 이용하여 클라이언트에게 임시 비밀번호를 전송해보자 ❕
① UserController : 임시 비밀번호를 받을 메일 주소를 받아 서비스 코드 로직으로 넘겨준다
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {
private final UserService userService;
@PostMapping("/new-pw")
public ApiResponse<SuccessStatus> sendNewPasswordEmail(@Valid @RequestBody NewPasswordDto dto) throws Exception {
return ApiResponse.onSuccess(userService.sendNewPasswordEmail(dto));
}
}
② UserRepository : 사용자 검증
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByEmail(String email);
}
③ UserServiceImpl : 필요한 정보를 세팅하여 SMTP 서버로 보내준다
@Service
@Transactional
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JavaMailSender javaMailSender;
@Value("${spring.mail.username}")
private String from;
public SuccessStatus sendNewPasswordEmail(NewPasswordDto dto) throws Exception {
Optional<User> user = userRepository.findByEmail(dto.getEmail());
if (user.isPresent()) {
String tempPassword = generateRandomPassword(10);
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setTo(dto.getEmail());
simpleMailMessage.setFrom(from);
simpleMailMessage.setSubject("[BABAL] 임시 비밀번호 안내");
simpleMailMessage.setText("임시 비밀번호 : " + tempPassword);
try {
user.get().updatePassword(passwordEncoder.encode(tempPassword));
javaMailSender.send(simpleMailMessage);
} catch (Exception e) {
e.printStackTrace();
throw new MessagingException("이메일 전송 실패");
}
return SuccessStatus._OK;
} else {
throw new GeneralException(ErrorStatus.MEMBER_NOT_FOUND);
}
}
public String generateRandomPassword(int length) {
String characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
SecureRandom random = new SecureRandom();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < length; i++) {
int randomIndex = random.nextInt(characters.length());
sb.append(characters.charAt(randomIndex));
}
return sb.toString();
}
}
L sendNewPasswordEmail : 사용자 이메일로 원하는 내용 전송하는 메서드
L generateRandomPassword : 랜덤으로 임시 비밀번호를 생성하는 메서드
2024.08.20 - [Spring/[P] AI 기반 사용자 맞춤형 메뉴와 맛집 추천] - [Springboot] 로그인 전 비밀번호 재설정 설계하기
'Spring > [P] AI 기반 사용자 맞춤형 메뉴와 맛집 추천' 카테고리의 다른 글
[Springboot] 비밀번호 재설정 개발하기 (2) | 2024.08.26 |
---|---|
[Springboot] 비밀번호 재설정 설계하기 (0) | 2024.08.23 |
[Springboot] 이메일로 임시 비밀번호 전송 개발하기 (1) build.gradle, application.yml, dto (2) | 2024.08.21 |
[Springboot] 이메일로 임시 비밀번호 전송 설계하기 (0) | 2024.08.20 |
[Springboot/JWT] 로그아웃 설계하기 (0) | 2024.08.19 |