问题是提供加密某些实体属性的能力。

由于实体是常规类并且在运行时生成,因此我将
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

10-06 10:08