Sekkison 유저의 비밀번호를 안전하게 저장하기위해 BCryptPasswordEncoder를 사용해서 암호화를 진행하기로 하였다.
BCryptPasswordEncoder는 Spring Seurity에서 제공하는 클래스 중 하나로 비밀번호를 암호화하는 데 사용할 수 있는 메서드를 가진 클래스이다.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
}
먼저 Spring Security를 dependencies에 추가한다.
@Bean
public BCryptPasswordEncoder bCryptPasswordEncoder() {
return new BCryptPasswordEncoder();
}
SecurityConfig 클래스에 BCryptPasswordEncoder을 bean으로 등록한다.
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
userRepository.save(user);
Authority authmember = authorityRepository.findByAuth("MEMBER");
UserAuthority ua = UserAuthority.builder()
.userId(user.getId())
.authority(authmember.getId())
.build();
userAuthorityRepository.save(ua);
UserService에 회원가입 로직에 추가해 넣어주면 간단하게 사용할 수 있다.
MySQL에 확인해보니 암호화된 비밀번호가 저장되는 것을 확인할 수 있었다.처음 BCryptPasswordEncoder를 사용할떄 PasswordEncoder를 Bean을 중복으로 등록하였다. 더미데이터를 넣을떄 오류가 나는 것을 확인하였다. BCryptPasswordEncoder는 PasswordEncoder의 구현체이므로 SecurityConfig에 중복으로 등록되는 것을 조심해야겠다는 생각을 했다.