저는 스프링 보안 코어 플러그인을 통해 생성 된 User
도메인 엔티티의 Grais에서 비밀번호 검증을 구현하려고합니다. 나는 내 기업에 다음 코드를 추가했습니다 :Grails의 사용자 정의 유효성 검사기에서 예외가 발생했습니다.
class User {
// Added by the spring security core plugin
String password
// Added by me
String passwordConfirm
static constraints = {
passwordConfirm blank:false, validator: { val, obj ->
if (!obj.password.equals(obj.passwordConfirm)) {
return "user.password.confirmation.error"
}
}
}
// other methods...
}
유효성 검사기는 password
가 passwordConfirm
일치하지 않을 때 예상대로 작동합니다.
org.hibernate.AssertionFailure: null id in com.test.User entry (don't flush the Session after an exception occurs)
at com.shopify.RegistrationController$_closure2.doCall(RegistrationController.groovy:14)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
내가 user.save(flush: true)
를 사용하여 내 엔티티를 지속하고있다 : 발리가 성공적으로 전달하고 인스턴스가 지속 되려고 할 때, 나는 다음과 같은 예외를 얻을.
내가 유효성 검사를 제거하면 내 인스턴스가 데이터베이스에 성공적으로 유지되므로 유효성 검사기에 문제가 있다고 가정합니다. 무엇이 잘못 되었을지에 대한 제안이 있습니까? Grails 버전 2.0.4를 사용하고 있습니다.
편집 :
def register = {
def user = new User(params)
if (!user.save(flush:true, failOnError:true)) {
render view: 'register', model: [userInstance: user]
} else {
render view: 'success'
}
}
편집 : 나는 다음과 같이 나의 실체가 저장 부분은 좋아, 난 봄 보안 코어에 의해 삽입 된 다음 코드를 주석으로이 작업을 관리 :
def beforeInsert() {
// encodePassword()
}
def beforeUpdate() {
// if (isDirty('password')) {
// encodePassword()
// }
}
현재로서는 왜 이런 일이 발생하는지 잘 모르겠지만이를 확인해 보겠습니다. 누군가가 이것에 대한 정보를 가지고 있다면, 나는 정말로 나와 공유하고 싶습니다.
편집 :이 관련 버그 리포트를 찾을 수 없음 : 당신의 사용자가 삽입하기 전에 사용자 암호를 해시 때문에 http://jira.grails.org/browse/GRAILS-9083
더 자세한 오류 로그를 얻으려면 저장에 추가 할 수 있습니까? user.save (flush : true, failOnError : true) –
동일한 작업 ... 추가 정보 없음. –
obj를 저장하는 코드의 전체 부분을 게시 할 수 있습니까? user.save() 대신에 –