{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();
}