看起来从不触发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)
}
}
知道我做错了什么?
提前致谢!
答案 0 :(得分:2)
这很奇怪,我不知道为什么,但这有效,我将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)
}
}
答案 1 :(得分:2)
您似乎错过了User类定义中springSecurityService的声明(如@gurbieta所观察到的):
transient springSecurityService
BTW,beforeUpdate
方法也需要一些修改。 mongodb gorm插件不支持dirty
检查方法。请参阅doc中的1.1 Compatibility with GORM for Hibernate
。
所以你必须修改
if (isDirty('password')) {
以其他方法检查密码是否已更改。