Mongodb 在grails+;数据库

Mongodb 在grails+;数据库,mongodb,grails,gorm,Mongodb,Grails,Gorm,看起来beforeInsert从未触发,密码以纯文本形式存储在DB中,我有一个用户域类,如下所示: class User { String email String name String surname String phone String password static constraints = { email(blank:false, email:true, unique:true) name(blan

看起来beforeInsert从未触发,密码以纯文本形式存储在DB中,我有一个用户域类,如下所示:

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)
    }
}
知道我做错了什么吗


提前谢谢

这很奇怪,我也不知道为什么,但这是可行的,我将beforeInsert变量更改为一个方法,并添加了瞬态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)
    }
}

这很奇怪,我也不知道为什么,但这是可行的,我将beforeInsert变量更改为一个方法,并添加了瞬态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)
    }
}

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

顺便说一句,
更新之前
方法也需要一些修改。mongodb gorm插件不支持
dirty
检查方法。请参阅中的与GORM for Hibernate兼容的
1.1

所以你必须修改

if (isDirty('password')) {

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

似乎您在用户类定义中遗漏了springSecurityService的声明(正如@gurbieta所观察到的):

顺便说一句,
更新之前
方法也需要一些修改。mongodb gorm插件不支持
dirty
检查方法。请参阅中的与GORM for Hibernate兼容的
1.1

所以你必须修改

if (isDirty('password')) {
使用其他方法检查密码是否已更改