SpringBoot + PasswordEncoder 사용하여 패스워드 암/복호화 실행하기

반응형
728x90
반응형

구현

1) build.gradle 의존성 추가

implementation 'org.springframework.boot:spring-boot-starter-security:2.4.2'

 

2) CommonEncoder.java 생성

@Component
public class CommonEncoder implements PasswordEncoder {
    private final PasswordEncoder passwordEncoder;

    public CommonEncoder() {
        this.passwordEncoder = new BCryptPasswordEncoder();
    }

    public CommonEncoder(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }

    @Override
    public String encode(CharSequence rawPassword) {
        return passwordEncoder.encode(rawPassword);
    }

    @Override
    public boolean matches(CharSequence rawPassword, String encodedPassword) {
        return passwordEncoder.matches(rawPassword, encodedPassword);
    }
}

 

 

적용

1) 회원 신규 등록의 경우 패스워드 암호화 실행하기

/**
* 회원 등록
* @param memberDto
* @return
*/
@PostMapping("")
public ResponseEntity<?> addMember(@ModelAttribute @Valid MemberDto memberDto) {
  /* 패스워드 암호화 */
  memberDto.setMemberPwd(passwordEncoding.encode(memberDto.getMemberPwd()));

  Member member = memberService.addMember(memberDto);

  ...
}

 

아래 encode 함수를 사용하여 암호화하였다.
passwordEncoding.encode(memberDto.getMemberPwd()

 

 

2) 로그인의 경우 입력한 패스워드와 DB 조회 결과의 패스워드 일치여부 확인하기

@PostMapping("/login")
public ResponseEntity<?> login(@ModelAttribute LoginDto loginDto) {
  /* ID, PWD 체크 */
  Optional<Member> member = memberService.getMemberLoginCheck(loginDto);

  if(member.isEmpty() || !passwordEncoding.matches(loginDto.getMemberPwd(), member.get().getMemberPwd())) {
  throw new BadRequestException();
  }
  ...
}

 

아래 matches 메소드로 일치여부를 확인하였다.
!passwordEncoding.matches(loginDto.getMemberPwd(), member.get().getMemberPwd())

 

 

 

반응형

Designed by JB FACTORY