问题是提供加密某些实体属性的能力。
由于实体是常规类并在运行时生成,因此我合并了 setter 中的加密逻辑和 getter 中的解密逻辑。但 hibernate 似乎希望 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
关于java - HIbernate 在 Getter/Setter 中加密和解密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15817367/