Entity의 password 부분에 붙여서 쓰려고 만든 Converter이다.
import jakarta.persistence.AttributeConverter;
import jakarta.persistence.Converter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
//한 방향으로만 암호화 되는 컨버터
//db 데이터를 가져올땐 그냥 가져옴
@Component
@Converter
public class PasswordConverter implements AttributeConverter<String, String> {
@Autowired
PasswordEncoder passwordEncoder;
@Override
public String convertToDatabaseColumn(String attribute) {
return passwordEncoder.encode(attribute);
}
@Override
public String convertToEntityAttribute(String dbData) {
return dbData;
}
}
나의 의도는 당연히 DB에 저장할때 암호화를 해서 저장 후, 조회할 때는 DB에 저장된 암호화된 값을 그대로 가져오는 Converter를 만드려고 한 것이다.
그런데 이 분 글을 읽으면서 굉장히 잘못된 방법이라는 것을 알게 되었다.
https://velog.io/@jkh9615/Spring-Security%EC%99%80-Attribute-Converter
이 방법을 그대로 쓰면 계속해서 암호화가 중복해서 일어나기 때문에 완전히 오작동한다.
예를 들면 : 다른 컬럼을 수정하는 작업을 할때
--회원가입--
--추후이름 바꾸기--
내부적으로 UPDATE를 실행하면서
이런 식이다.
즉 Converter는 DB와 엔티티 간의 완전히 상호 전환 가능한 데이터를 다룰때만 사용하도록 하자.