[英]JPA: Using AttributeConverter automatically decrypt in JPA query
我編寫了自己的 AttributeConverter 來加密和解密字符串,它類似於:
@Converter
public class CryptoConverter implements AttributeConverter<String, String> {
@Override
public String convertToDatabaseColumn(String attribute) {
//works fine
}
@Override
public String convertToEntityAttribute(String dbData) {
//works fine
}
}
我的實體 class 正在使用這個轉換器:
@Entity
@PublishKeyword
@Table(name = "CARD")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Card {
//...
@Column(name = "CARD_LAST_4_DIGITS")
@Convert(converter = CryptoConverter.class)
@Attribute(keyword = "CARD_CARDLAST4DIGITS", resolvedKeyword = "cardLast4Digits", length = 100)
private String cardLast4Digits;
//...
}
直到這里一切正常。 我設置的數據在數據庫中加密,得到結果集后也解密。 但 CryptoConverter 不會在 JPA 查詢中自動使用。 ?
@Override
public Card findCard(String lastFour, String tenantId, EntityManager entityManager) {
Query query = entityManager.createQuery("SELECT e FROM Card e where e.cardLast4Digits = :lastFour").setParameter("lastFour", "lastFour");
List<Card> cardList = query.getResultList();
if (cardList != null && cardList.size() > 0) {
return cardList.get(0);
}
return null;
}
輸入也被轉換。 因此,如果您使用非對稱加密(因此每次加密相同的值都會得到不同的輸出),那么過濾將永遠無法工作。
解決方案可以是使用對稱加密或添加使用 hash 的列(對於相同的值始終相同)並對其進行過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.