{noop}
을 없애보자.
스프링 시큐리티의 PasswordEncoder를 사용하자.
패스워드 인코더 빈 등록
@SpringBootApplication
public class DemoSpringSecurityFormApplication {
@Bean
public PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
public static void main(String[] args) {
SpringApplication.run(DemoSpringSecurityFormApplication.class, args);
}
}
서비스
@Autowired
PasswordEncoder passwordEncoder;
// ...
public Account createAccount(Account account) {
account.encodePassword(passwordEncoder);
return accountRepository.save(account);
}
엔티티
public void encodePassword(PasswordEncoder passwordEncoder) {
this.password = passwordEncoder.encode(this.password);
}
스프링 시큐리티 5이전 버전에서는 이렇게 동작을 했었다. 그런데 이후 버전 부터는 전략이 필요하다.
이전에는 noop이 기본 전략이었는데 bcrypt로 전략이 변경되었다. 이제 대한 문제 기존 비밀번호는 평문 이었을 수 있는데 버전을 올리면 인증이 다 깨진다.
수정 해보자
@Bean
public PasswordEncoder passwordEncoder() {
return PasswordEncoderFactories.createDelegatingPasswordEncoder();
}
다양한 인코딩 방식을 지원한다.