해당 인터페이스는 스프링 시큐리티에서 사용자 암호를 검증하는 방법을 구현한다. 아래와 같은 구성을 가진다.
public interface PasswordEncoder {
String encode(CharSequence rawPassword);
boolean matches(CharSequence rawPassword, String encodedPassword);
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
}
애플리케이션에서 암호화를 새로운 방식으로 전환하고 싶을때가 있을 수 있다. 이럴때 기존 암호화된 정보들을 새로운 암호화 방식으로 바꾸는 게 쉽지 않을 수 있다. 이러한 경우 해당 객체를 이용하는것은 좋은 방법이 될 수 있다.
DelegatingPasswordEncoder는 PasswordEncoder에 구현체중 하나이지만 실제로 암호화를 구현하지 않고 다른 구현체에게 작업을 위임한다.
내부적으로 map을 가지고 있으며 다른 구현체들을 해당 맵에 접두사를 키로 구현체를 값으로 가지고 있다.
예를 들어 BCryptPasswordEncoder이면 키로 bcrypt를 값으로 BCryptPasswordEncoder를 가지고 있는것이다.