Grails で検証が完了した後に Domain オブジェクトを操作する方法はありますか?
データベースに挿入する前にパスワードをエンコードする必要がありますが、検証が完了した後にのみ行いたいです。
ありがとう。
Grails で検証が完了した後に Domain オブジェクトを操作する方法はありますか?
データベースに挿入する前にパスワードをエンコードする必要がありますが、検証が完了した後にのみ行いたいです。
ありがとう。
私にとっては、gorm オブジェクトで検証したものは、保存したものでなければなりません。エンコードされていないパスワードを検証したい場合は、パスワードに適切な制約を付けてコマンド オブジェクトを作成し、それを検証することをお勧めします。コマンド オブジェクトが検証に合格した場合は、パスワードをエンコードし、挿入/更新する gorm オブジェクトに追加します。
このようにして、gorm オブジェクトはエンコードされたパスワードのみを認識し、ここではそれが空でない (または 16 進数でエンコードされたパスワードのように見える) ことを検証する必要があります。
イベントを使用できます:
beforeInsert - Executed before an object is initially persisted to the database
beforeUpdate - Executed before an object is updated
http://grails.org/doc/latest/guide/GORM.html
Spring セキュリティ プラグインによって生成されたユーザー クラスを見て、例を確認できます。とにかくこの機能を再実装する必要がないように、プラグインが要件に合っているのではないでしょうか?
仕事をします:
class User {
transient saltSource
transient springSecurityService
String password
static constraints = {
password blank: false
}
static mapping = {
password column: '`password`'
}
def beforeInsert() {
encodePassword()
}
def beforeUpdate() {
if (isDirty('password')) {
encodePassword()
}
}
protected void encodePassword() {
if (springSecurityService)
password = springSecurityService.encodePassword(password,saltSource.systemWideSalt)
}
}
考慮すべきことは、パスワードの複雑さを検証する方法です。これは、コントローラーとドメイン クラスの中間にあるサービスで発生するか、カスタム パスワード フィールド バリデーターである必要があります。