gpt4 book ai didi

security - 保存时修改Grails域

转载 作者:行者123 更新时间:2023-12-02 15:38:55 24 4
gpt4 key购买 nike

说我有一个用户域类,其字段为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 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
}
}

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

最佳答案

使用GORM Events

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

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

关于security - 保存时修改Grails域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175443/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com