1

Grails で検証が完了した後に Domain オブジェクトを操作する方法はありますか?

データベースに挿入する前にパスワードをエンコードする必要がありますが、検証が完了した後にのみ行いたいです。

ありがとう。

4

3 に答える 3

2

私にとっては、gorm オブジェクトで検証したものは、保存したものでなければなりません。エンコードされていないパスワードを検証したい場合は、パスワードに適切な制約を付けてコマンド オブジェクトを作成し、それを検証することをお勧めします。コマンド オブジェクトが検証に合格した場合は、パスワードをエンコードし、挿入/更新する gorm オブジェクトに追加します。

このようにして、gorm オブジェクトはエンコードされたパスワードのみを認識し、ここではそれが空でない (または 16 進数でエンコードされたパスワードのように見える) ことを検証する必要があります。

于 2012-07-02T22:54:18.500 に答える
2

イベントを使用できます:

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 セキュリティ プラグインによって生成されたユーザー クラスを見て、例を確認できます。とにかくこの機能を再実装する必要がないように、プラグインが要件に合っているのではないでしょうか?

于 2012-07-02T19:04:51.167 に答える
0

仕事をします:

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)
  }

}

考慮すべきことは、パスワードの複雑さを検証する方法です。これは、コントローラーとドメイン クラスの中間にあるサービスで発生するか、カスタム パスワード フィールド バリデーターである必要があります。

于 2013-01-30T11:00:32.680 に答える