簡體   English   中英

JPA:在 JPA 查詢中使用 AttributeConverter 自動解密

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM