作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试对所有域类进行透明加密。我使用的逻辑是,我已实现AbstractPersistenceEventListener,以便可以挂接到事件中,
在PreInsert事件中,我将使用域Object的所有属性并进行加密,如下所示
def domainClass = new DefaultGrailsDomainClass(event.entityObject.class)
def fieldsNeedtoBeEncrypted =domainClass?.constrainedProperties?.keySet()
fieldsNeedtoBeEncrypted.each {String fieldName ->
// Getting the values of the field to encypt
def plainText = domainObject."$fieldName"
if(plainText)
domainObject."$fieldName" = Cipher.encrypt(key, plainText)
}
def fieldsNeedtoBeEncrypted = event.entityObject.dirtyPropertyNames
fieldsNeedtoBeEncrypted.each {String fieldName ->
// Getting the values of the field to encypt
def plainText = domainObject."$fieldName"
if(plainText)
domainObject."$fieldName" = Cipher.encrypt(key, plainText)
}
fieldsNeedtoBeEncrypted.each {String fieldName ->
def cipherText = domainObject."$fieldName"
if(plainText)
domainObject."$fieldName" = Cipher.decrypt(key, cipherText)
}
// Don't save the decrypted value which are present in session
domainObject.discard()
最佳答案
我可以为您提供解决方法并解释我认为的问题所在。
问题:
因此,我进行了一些测试,结果发现,当应用程序将信息持久存储到数据库时,事件按以下顺序发生:SaveOrUpdateEvent,ValidationEvent,PreInsertEvent,PostInsertEvent。
如您所述,在触发PreInsert事件时尝试修改实体对象不会导致修改持久化到数据库中。我相信这样做的原因是因为要保留的信息在PreInsert事件之前的某个时间被GORM整理到一个单独的对象中,并且这就是要保留的信息。
解决方法:
当触发SaveOrUpdate事件而不是PreInsert事件时,请对entityobject进行修改。
关于hibernate - 使用AbstractPersistenceEventListener进行透明加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883578/
我想继承 AbstractPersistenceEventListener所以我可以register custom event listeners in Grails 2.5.4 .但是,我应该将这些
我是一名优秀的程序员,十分优秀!