java - HIbernate 在 Getter/Setter 中加密和解密?

标签 java hibernate groovy grails-orm

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

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

相关文章:

scala - Elasticsearch 脚本将元素添加到数组中

java - 同步会影响对象成员吗?

java - 用于 SWT/AWT 的图形可视化库

java - Hibernate:更好的单体类还是多个类映射?

java - 带有 'case when exists' 的 JPA @Query 不适用于 Hibernate

grails - Grails定义或获取操作和 Controller 名称的全局变量

java - 如何格式化 jsf 2.0 <f :selectItems/> with date value from List

java - 如何获取 runtime.getruntime.exec ("netstat"的完整信息)

java - 使用 EntityManager 的两个实例时删除实体

java - 在没有任何 GC Activity 的情况下清理 JVM 内存