我尝试使用Spring和Jpa(Hibernate)对单个字段使用数据库加密。以下是实体的一部分:
@ColumnTransformer(
read="AES_DECRYPT(UNHEX(lastname), UNHEX(SHA2('secret', 512)))",
write="HEX(AES_ENCRYPT(?, UNHEX(SHA2('secret', 512))))"
)
private String lastname;
这使用Mysql函数来加密和解密我的字段,所以我不必关心Java。
我的问题是我不能在我的Java代码中硬编码密码,但Java-Annotations只允许非动态的最终字符串作为参数。 如何使用spring应用程序属性替换密码'secret'
?
我无法使用Jpa-Converter,因为我希望能够按lastname
进行过滤和排序。我还尝试将MySQL5InnoDBDialect子类化并注册StandardSQLFunction
,但这在概念上不适用于@ColumnTransformer
,因为这些函数是在JPA的上下文中注册的,而不是SQL。我还想过以编程方式操作hibernate配置之前它用于创建EntityManagerFactory,但我不知道如何做到这一点。任何帮助表示赞赏。