728x90
User 클래스에서 juminNumber 속성 값을 테이블에 저장할 때 암호화하는 예제입니다.
User Entity 생성
@Entity
@Table(name = "USER")
@DynamicInsert
@DynamicUpdate
@Getter
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "NAME", length = 50, nullable = false)
private String name;
@Column(name = "JUMIN_NUMBER", length = 100, nullable = false)
@Convert(converter = StringCryptoConverter.class)
private String juminNumber;
...
}
StringCryptoConverter 생성
@Convert
public class StringCryptoConverter implements AttributeConverter<String, String> {
private static final String ALGORITHM = "AES/ECB/PKCS5Padding";
private static final byte[] KEY = "lelecoder".getBytes();
@Override
public String convertToDatabaseColumn(String attribute) {
Key key = new SecretKeySpec(KEY, "AES");
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.ENCRYPT_MODE, key);
return new String(Base64.getEncoder().encode(cipher.doFinal(attribute.getBytes())));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public String convertToEntityAttribute(String dbData) {
Key key = new SecretKeySpec(KEY, "AES");
try {
Cipher cipher = Cipher.getInstance(ALGORITHM);
cipher.init(Cipher.DECRYPT_MODE, key);
return new String(cipher.doFinal(Base64.getDecoder().decode(dbData)));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
참고자료
'Spring' 카테고리의 다른 글
Thymeleaf 템플릿 엔진에서 로케일 텍스트 메시지 처리 (0) | 2019.07.25 |
---|---|
Thymeleaf 에서 현재 로케일 값 출력하기 (0) | 2019.07.25 |
Spring Core 라이브러리 이용해서 Properties 파일 데이터 읽기 (0) | 2019.05.28 |
Spring Camp 2019 강의 자료 모음 (0) | 2019.05.06 |
Spring HandlerMethodArgumentResolver 인터페이스 (2) | 2019.05.05 |
댓글