2012-02-13 41 views
1

除了使用什么外,是否有更好的方法来处理使用Play框架的异常?使用Play框架的例外

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

我想实现的是如此简单,用户验证。截至目前上面的代码正常工作,但想从任何人知道,如果有任何更好的方法来处理例外游戏除此之外协助我?

回答

2

Part 8的播放框架入门指南涵盖了如何在播放框架内设置用户登录。有很多已经构建的框架来处理这个问题,所以你只需要弄清楚如何使用它。

查看播放文档中的simplified query内容,以获取有关如何使用播放框架执行查询的更多信息,而不是诉诸于直接的JPA。

回答您的具体问题,你有几种选择...

选项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

谢谢,提供的信息非常有用,但我仍然在寻找一种更清晰的异常处理方式。对于我的项目中的一些模块,我需要捕获这些异常。有一些方法会抛出用户定义的异常。有任何示例链接? – 2012-02-13 22:17:00

+0

如果你想专门抛出并捕获异常,那么你应该使用基本的Java功能,因为你正在使用你的问题。 – grahamrb 2012-02-13 22:45:19

+0

像grahamrb节目一样使用JPA可能是最好的选择。如果你仍然需要(通用)异常处理,你应该检查'@ Catch'注释。我们在这里使用它来处理从数据库中抛出的约束。 – evandongen 2012-02-16 15:54:01

2

由于grahamrb有其他“更清洁”的选择与玩。

假设用户名是唯一的:

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

不发生异常与此代码,返回null值与有没有结果。