본문 바로가기

프로그래밍/Spring Boot 프로젝트

항공사 플랫폼 팀 프로젝트_비밀번호 변경 기능(BCrypt 라이브러리 사용)

반응형

비밀번호 변경 기능

BCrypt 라이브러리를 사용하여 비밀번호 변경 기능을 구현했습니다.

 

 

jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<form action="/changePw" method="post">
        <div>
            <p>
                기존 비밀번호 <input type="password" name="password" placeholder="기존 비밀번호를 입력">
            </p>
            <p>
                신규 비밀번호 <input type="password" name="newPassword" placeholder="8~20자리">
            </p>
            <p>
                신규 비밀번호 확인 <input type="password" name="newPasswordCheck" placeholder="8~20자리">
            </p>
        </div>
 
        <div>
            <button type="submit" class="btn btn-primary">확인</button>
            <button type="button" onclick="location.href='/'" class="btn btn-danger">취소</button>
        </div>
    </form>
cs

→ name 속성에 비밀번호, 새 비밀번호, 새 비밀번호 확인 속성을 줌.

 

 

dto

1
2
3
4
5
6
7
8
9
10
11
@Data
public class PasswordCheckDto {
    
    private String id;
    private String password;
    private String type;
    
    private String newPassword;
    privateString newPasswordCheck;
    
}
cs

 

 

controller

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@PostMapping("/changePw")
public String changePwProc(PasswordCheckDto passwordCheckDto) {
    User principal = (User) session.getAttribute(Define.PRINCIPAL);
    
    // 비밀번호 복호화
    boolean isChecked = bCryptPasswordEncoder.matches(passwordCheckDto.getPassword(), principal.getPassword());
    
    if(isCHecked == false) {
        throw new CustomRestfullException("비밀번호가 틀렸습니다.", HttpStatus.BAD_REQUEST);
    } else {
        // 신규 비밀번호 암호화 처리 후 update 처리
        if(passwordCheckDto.getNewPassword().equals(passwordCheckDto.getNewPassword()) {
            // 신규 비밀번호와 신규 비밀번호 확인이 같다면 update 처리
            // encode 해야 할 비밀 번호는 NewPassword이다.
            String hashPw = bCryptPasswordEncoder.encode(passwordCheckDto.getNewPassword());
            
            // 상태값 변경 - 암호화 된 비밀번호를 set 하기
            passwordCheckDto.setPassword(hashPw);
            passwordCheckDto.setId(principal.getId());
            userService.updateUserById(passwordCheckDto);
        } else {
            // 같지 않다면 예외 처리
            throw new CustomRestfullException("입력하신 신규 비밀번호와 일치하지 않습니다.", HttpStatus.BAD_REQUEST);
        }
    }
    
    return "redirect:/";
}
cs

→ update 처리 후 암호화 처리를 하려 해서 암호화가 안 된 값이 들어갔다. 

순서를 바꿔 신규 비밀번호 암호화 처리 후 update 처리하니 해결이 되었다.

→ 상태값 변경을 잊지마. 

반응형