0

次のドメイン クラスの継承戦略があります。

  • AbstractDomain (デフォルトのプロパティを含む)
  • ユーザーが AbstractDomain を拡張する
  • オペレーターはユーザーを拡張します

AbstractDomain では、メソッドを使用して beforeUpdate および beforeInsert を実装するメソッドを作成したため、クラスを拡張する際にこれらを拡張できます。

抽象ドメイン

abstract class AbstractDomain {
    protected void onBeforeInsert() {
    ...
    }

    protected void onBeforeUpdate() {
    ...
    }

    def beforeInsert() {
        onBeforeInsert()
    }

    def beforeUpdate() {
        onBeforeUpdate()
    }
}

ユーザークラスには、次のようにユーザーパスワードを暗号化するロジックがあります..

ユーザー

public class User extends AbstractDomain {
    @Override
    protected void onBeforeUpdate() {
        super.onBeforeUpdate()
        if (isDirty('password')) {
            encodePassword()
        }
    }

    protected void encodePassword() {
        println "encoding password!!!!"
        if (springSecurityService) { // added the if clause to ensure
that tests work correct!
            password = springSecurityService.encodePassword(password)
        }
    }
}

オペレーター

public class Operator extends User {
// code omitted
}

そのため、オペレーターを更新しようとすると、「encoding password!!!!」というメッセージが表示されます。プロパティは設定されていますが、DB を確認すると、パスワードはまだクリア テキストのままです。変更は効果がなく、永続化されていないようです。

私が見逃している可能性のある手がかりはありますか?

4

1 に答える 1

0

コードを見ると...「エンコードパスワード!!!」が表示されている場合 テキストですが、パスワードがエンコードされていない場合、springSecurityService プロパティが設定されていないか、encodePassword 関数が機能しませんでした...これは継承とは関係ありません。それがより正確であるため、私はあなたのprintlnをifの中に移動します。

于 2012-09-25T20:36:31.497 に答える