繁体   English   中英

保存时修改Grails域

[英]Grails Domain modification on save

假设我有一个用户域类,其中包含usernamepassword字段。 为了简单起见,我想将密码存储为SHA-512哈希。 我还想在对密码进行哈希处理之前先对其进行验证,而且还要在保存之前透明地对密码进行哈希处理。 是否可以在域对象中执行此操作?

static constraints = 
{
    username(blank: false, unique: true);
    password(minSize: 10);
}

而不是说:

def user = new User(username: "joe", password: createHash("joepass"));

我无法验证哈希的地方

def user = new User(username: "joe", password: "joepass");
if(user.validate())
{
    user.save(); // Would then turn password into a hash on save
}
else
{
    // Handle validation errors
}

GORM活动之后,我提出了以下建议:

def beforeInsert = { doHash(); }
def beforeUpdate = { doHash(); }
void doHash()
{
    if(this.password.size() != 32)
    {
        this.password = this.password.encodeAsHash(); // I wrote a codec for this
    }
}

现在,这在创建新用户时可以正常工作。 但是,如果我创建一个用户,给他们一个密码,然后保存它们,然后更改密码并重新保存,则不会调用这两种方法,也不会存储普通测试密码。

使用GORM事件

在保存或更新事件上,您可以创建哈希

   def beforeInsert = {
       // do hash magic
   }
   def beforeUpdate = {
        // do hash magic
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM