假设我有一个用户域类,其中包含字段username
和password
. 为简单起见,我想将密码存储为 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 Events之后,我提出了以下建议:
def beforeInsert = { doHash(); }
def beforeUpdate = { doHash(); }
void doHash()
{
if(this.password.size() != 32)
{
this.password = this.password.encodeAsHash(); // I wrote a codec for this
}
}
现在这在创建新用户时工作正常。但是,如果我创建一个用户,给他们一个密码并保存它们,然后更改密码并重新保存,这些方法都不会被调用,并且纯测试密码会被存储。