【问题标题】:beforeInsert not triggered in grails + mongodb在 grails + mongodb 中未触发 beforeInsert
【发布时间】:2013-01-24 01:14:42
【问题描述】:

看起来 beforeInsert 从未被触发,并且密码以纯文本形式存储在 DB 中,我有一个像这样的 User 域类:

class User {

    String email
    String name
    String surname
    String phone
    String password

    static constraints = {
        email(blank:false, email:true, unique:true)
        name(blank:false)
        surname(blank:false)
        phone(blank:false)
        password(blank:false, password:true)
    }

    def beforeInsert = { encodePassword() }

    def beforeUpdate() {
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        password = springSecurityService.encodePassword(password)
    }
}

知道我做错了什么吗?

提前致谢!

【问题讨论】:

    标签: mongodb grails grails-orm


    【解决方案1】:

    这很奇怪,我不知道为什么,但这有效,我将 beforeInsert var 更改为一个方法,并添加了瞬态 springSecurityService

    class User {
    
        transient springSecurityService
    
        String email
        String name
        String surname
        String phone
        String password
    
        static constraints = {
            email(blank:false, email:true, unique:true)
            name(blank:false)
            surname(blank:false)
            phone(blank:false)
            password(blank:false, password:true)
        }
    
        def beforeInsert() {
            encodePassword()
        }
    
        def beforeUpdate() {
            if (isDirty('password')) {
                encodePassword()
            }
        }
    
        protected void encodePassword() {
            password = springSecurityService.encodePassword(password)
        }
    }
    

    【讨论】:

      【解决方案2】:

      您似乎错过了在 User 类定义中声明 springSecurityService (正如@gurbieta 所观察到的):

      transient springSecurityService
      

      顺便说一句,beforeUpdate 方法也需要一些修改。 mongodb gorm 插件不支持dirty 检查方法。请参阅doc 中的1.1 Compatibility with GORM for Hibernate

      所以你必须修改

      if (isDirty('password')) {
      

      使用其他方法检查密码是否已更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-06
        • 2012-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多