如何在springSecurity中的userRole这样的域类中使用审计日志?

class SecUserSecRole implements Serializable {
      static auditable = true

      User user
      Role role

      ...

      def onSave = { map ->
      println "onSave userRole detected"
      }
}

不管怎么说,还是要谢谢你..

最佳答案

我不完全理解为什么这行不通,但是原因似乎是auditPlugin在类的ID为复合时无法获取持久属性。因此,它假定没有任何变化,并且不会调用onSave。

生成的SecUserSecRole类引入了一个基于'role', 'user'的ID组合键,auditPlugin试图从休眠的PostInsertEvent中查找持久的属性名称。在此尚不清楚原因,但当域使用复合键时属性将为空。

解决方法是尝试将您的域映射更改为

static mapping = {
   //id composite: ['role', 'user']
   role unique: 'user'
   version false
}

注意:这不是解决方案,就springSecurity插件而言,可能还有其他副作用。

更新:我关心的是删除组合键可能会影响springSecurity多对多关系,但是根据Burt的post,删除组合键并按照我在此提到的方式创建它似乎是安全的。

10-04 12:45