4

アプリケーションで MongoDB と Spring Security Core と UI を使用しています。このビットを除いて、ほぼすべてが完全に機能します。

    def beforeUpdate() {
        if (isDirty('password')) {
            encodePassword()
        }
    }

これは User ドメイン クラスの一部です。MongoDB プラグインではまだダーティ チェックがサポートされていないことを読みました。だから私はこのように自分自身を実装しようとしました:

if ( User.collection.findOne(id:id).password != password ) {
            encodePassword()
        } 

しかし、それは機能していません。私は古典を取得しますCannot get property 'password' on null object.

ドメインクラス定義からインスタンスを参照する方法を知っている人はいますか? また、ダーティチェックを実装するためのより良いアイデアを受け入れます。

4

4 に答える 4

2

多分findOneはnullを返していますか?試しましたか:

def existing = User.collection.findOne(id:id)?.password 
if ( !existing || existing != password ) 
于 2012-05-09T15:59:50.527 に答える
0
User.collection.findOne(_id:id).password
于 2013-03-07T11:15:10.587 に答える
0

動的メソッドが機能するまで、同じ問題にぶつかりました。これを行う必要があります。

def mongo
def beforeUpdate() {
    def persisted = mongo.getDB("test").user.findOne(id).password
    def encodedNew = springSecurityService.encodePassword(password)
    if(persisted != encodedNew) password = encodedNew
    //if (isDirty('password')) {
    //  encodePassword()
    //}
}
于 2012-05-30T13:59:21.877 に答える