有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java HIbernate在getter/setter中加密和解密?

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

由于实体是groovy类,并且是在运行时生成的,所以我将 setter中的加密逻辑和getter中的解密逻辑。但hibernate似乎希望Getter/Setter是对称的。会议结束了。save()调用getter在内部设置值,因此它总是将解密后的版本保存到数据库中

这是Hibernate的默认行为吗?有什么办法可以绕过这个问题吗


共 (2) 个答案

  1. # 1 楼答案

    每当你想在数据库和持久实体之间做一些调整时,方法就是使用custom user type。我用它来确保保存的字符串中填充空格。与向getter和setter添加代码相比,它的侵扰性要小得多,而且可以避免由于Hibernate认为自己做了更改而导致的意外保存问题

  2. # 2 楼答案

    你需要在这里使用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