Coding/Spring
SpringBoot + PasswordEncoder 사용하여 패스워드 암/복호화 실행하기
shbada
2021. 2. 18. 19:21
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())
반응형