2011-01-02 7 views
1

私は2つのプロパティ:ログイン/パスワードを持つユーザーと呼ばれるクラスがあります。私は休止状態を使用して私のアプリケーションでユーザーを認証しようとしていますが、私の要求は機能しません。Noobは、休止状態に関する質問

[編集]戻り値はNULLです。私はテストのために私のデータベースに2人のユーザーを持っています。ここで

は私のコードです:

@Override 
public User authenticate(String login, String password) 
    throws NullPointerException { 
    Session session = this.getSession(); 
    User user = (User) session 
     .createCriteria(User.class) 
     .add(
         Restrictions.and(
          Property.forName("login").eq(login), 
          Property.forName("password").eq(password) 
        )).uniqueResult(); 

    if (user == null){ 
     throw new NullPointerException("User not found"); 
    } 

    return user; 
} 

ができる人は、自分のコードが間違っているものを私に伝えますか?

2011年新年あけましておめでとう!

+1

コードを実行したときに何が戻ってきていますか/何が起こっていますか? – crnlx

+1

まあ、あなたが私たちに示したコードで構文的に間違ったことはありません。パスワードの条件を削除すると機能しますか? (つまり、「ログイン」だけで検索する)。 – Alastair

+0

ええ、私はログインだけで検索しようとしましたが、返されたユーザーは常にnullです。私は何が問題なのか分かりません。私のマッピングは非常に単純です:2つのプロパティ(ゲッターとセッターを使ったログイン/パスワード)。 – Dimitri

答えて

0

まず、データベースからユーザーを取得する必要があります。ユーザーが存在しない場合は、ログインページにメッセージを表示します。すべてのログイン名はunique列にある必要がありますので、uniqueResultの制限を押す必要はありません。

第2に、一度ユーザーをプルアップすると、パスワードハッシュを比較し、OKであればユーザーを通過させるだけです。

上記は、Hibernateのロジックを簡略化し、コードのトラブルシューティングを容易にします。 これはほとんどのサイトで行われています。少なくとも私が心配している限り。