问题是提供加密某些实体属性的能力。
由于实体是常规类并且在运行时生成,因此我将
setter中的加密逻辑和getter中的解密逻辑。但是似乎冬眠期望Getter / Setter是对称的。 session.save()调用getter在内部设置值,因此它总是将解密后的版本保存到数据库中。
这是Hibernate的默认行为吗?有什么办法可以解决这个问题?
最佳答案
您需要在此处使用GORM事件。在数据库插入之前进行加密
def beforeInsert() {
if (encProperty != null) {
encProperty = customEncrypt(encProperty)
}
}
从数据库读取后解密:
def afterLoad() {
if (encProperty != null)
encProperty = customDecrypt(encProperty )
}
在更新过程中使用
def beforeUpdate()
进行加密。参考:
http://grails.org/doc/latest/guide/GORM.html#5.5.1%20Events%20and%20Auto%20Timestamping