2012-02-13 19 views
1

Playフレームワークを使用して例外を処理する方法はありますか?Play Frameworkを使用した例外

Query q = JPA.em().createQuery("SELECT u FROM " + 
    User.class.getName() + 
    " u WHERE userCode = :userCd AND password = :password" 
) 
.setParameter("userCd", userName) 
.setParameter("password", password); 

User user=null; 
try { 
    user = (User) q.getSingleResult(); 
} catch (NoResultException n) { 
    flash.put("username",userName); 
    flash.error("Invalid Credentials"); 
    index(); 
} 

私が達成しようとしているのは、とても簡単なユーザー検証です。現在のところ、上記のコードは正しく動作しますが、これ以外にPlayの例外を処理するためのよりよい方法があれば、誰かから助けてくれることを知りたがっていますか?

答えて

2

Part 8のプレイフレームワーク入門ガイドは、プレイフレームワーク内でユーザーログインを設定する方法について説明しています。これを処理するために既に構築されたフレームワークがたくさんあるので、その使い方を理解するだけです。

ストリーミングJPAに頼るのではなく、再生フレームワークを使用してクエリを実行する方法の詳細については、再生に関するドキュメントのsimplified queryをご覧ください。

あなたはいくつかのオプションを持って、あなたの特定の質問に答える...

オプション1(クエリーにユーザ名とパスワードを渡す):

User<List> users = User.find("byUsernameAndPassword", userName, password).fetch(); 
if (users.size() == 0) 
{ 
    //do flash stuff here 
} 
else 
{ 
    //we found a valid user 
} 

オプション2(ユーザー名のみを渡しますパスワードを確認してください):

User<List> users = User.find("byUsername", userName).fetch(); 
if (users.size() == 0) 
{ 
    //do flash stuff here 
} 
else 
{ 
    //we found a valid user 
    // check password and if matches then continue otherwise do flash 
} 

オプション2にはいくつかの利点がありますどのようにパスワードなどを格納するようにしたので、あなたはそれを塩漬けし、ハッシュしたかもしれません。または、5回試行した後にアカウントをロックしたい場合は、パスワードが一致するかどうかにかかわらず、ユーザーオブジェクトを取得する必要があります。

+0

ありがとう、提供情報は非常に役に立ちますが、依然としてよりクリーンな方法でいくつかの例外処理を探しています。私のプロジェクトのいくつかのモジュールでは、これらの例外をキャッチする必要があります。ユーザー定義の例外がスローされるいくつかのメソッドがあります。そのためのサンプルリンクはありますか? –

+0

特に例外をスローしてキャッチしたい場合は、あなたの質問に使用しているように、基本的なJava機能を使用する必要があります。 – grahamrb

+0

grahamrbショーのようなJPAを使うことは、おそらく行く方法です。まだ(ジェネリック)例外処理が必要な場合は、 '@ Catch'アノテーションをチェックアウトする必要があります。たとえば、データベースからスローされた制約を処理するためにここで使用します。 – evandongen

2

grahamrbには、他の「クリーナー」オプションがあります。

と仮定すると、ユーザー名が一意である:

User user = User.find("byUsernameAndPassword").first(); 
if(user == null) { 
//User not found or password incorrect 
} else { 
//User found and password correct 
} 

例外が、このコードで提起されていない、null値が結果ではないがと返されます。

関連する問題