프로젝트에 비밀번호 업데이트 기능을 추가하는 것은 사용자가 자신의 비밀번호를 안전하게 변경할 수 있도록 하는 중요한 보안 기능입니다. Spring Security의 BCryptPasswordEncoder를 활용하여 비밀번호를 암호화한 후 데이터베이스에 저장함으로써, 사용자의 비밀번호 보안을 강화할 수 있습니다.
UpdatePasswordDto 구현
UpdatePasswordDto는 클라이언트로부터 받은 비밀번호 변경 요청 데이터를 담는 객체입니다. 새로운 비밀번호를 필드로 포함합니다.
@Getter
public class UpdatePasswordDto {
private String password;
}
UserController 수정
UserController 내에 비밀번호 업데이트를 위한 엔드포인트를 추가합니다. 이 메소드는 토큰에서 추출한 사용자 ID를 사용하여 해당 사용자의 비밀번호를 업데이트합니다.
@PostMapping("/update")
public void updatePassword(@RequestBody UpdatePasswordDto passwordDto) {
TokenContext context = TokenContextHolder.getContext();
Long userId = context.getUserId();
userService.updatePassword(userId, passwordDto);
}
User 엔티티 수정
User 엔티티 클래스에는 비밀번호를 업데이트하는 로직을 포함해야 합니다. 하지만, updatePassword 메소드 내에서 비밀번호를 직접 변경하는 대신, UserService에서 비밀번호 암호화 후 엔티티에 적용해야 합니다.
public void updatePassword(UpdatePasswordDto updatePasswordDto) {
if(updatePasswordDto.getPassword() != null) this.password = updatePasswordDto.getPassword();
}
UserService 수정
UserService에서는 updatePassword 메소드를 통해 사용자의 비밀번호를 업데이트하는 로직을 구현합니다. 이 때, BCryptPasswordEncoder를 사용하여 비밀번호를 암호화한 후 저장합니다.
@Transactional
public void updatePassword(Long userId, UpdatePasswordDto passwordDto) {
User user = userRepository.findById(userId).orElseThrow(
() -> new BadRequestException("회원가입을 해주세요.")
);
user.updatePassword(passwordDto);
user.hashPassword(bCryptPasswordEncoder);
userRepository.save(user);
}
결론
이 구현을 통해 사용자는 자신의 비밀번호를 안전하게 변경할 수 있습니다. 비밀번호 변경 요청이 들어올 때마다, 새로운 비밀번호는 BCryptPasswordEncoder를 통해 암호화되어 데이터베이스에 저장됩니다. 이 접근 방식은 사용자 비밀번호의 보안을 강화하며, 애플리케이션 전반의 보안 수준을 높이는 데 기여합니다.
'프로젝트 (Java) > 예약마켓' 카테고리의 다른 글
[프로젝트] 14. 팔로우 및 팔로우 취소 기능 (1) | 2024.01.26 |
---|---|
[프로젝트] 13. BaseTimeEntity 추가를 통한 데이터 생명 주기 관리 (0) | 2024.01.26 |
[프로젝트] 11. 프로필 전체 조회 및 ID를 통한 개별 사용자 조회 기능 (0) | 2024.01.26 |
[프로젝트] 10. 프로필 업데이트 기능 구현 (0) | 2024.01.26 |
[프로젝트] 9. 비밀번호 암호화 기능 구현 (0) | 2024.01.25 |