Java 为什么用户名和密码返回空值?
因此,我使用Java持久性编写了用户名和密码验证代码Java 为什么用户名和密码返回空值?,java,Java,因此,我使用Java持久性编写了用户名和密码验证代码 public Subscriber validateLogin(String username, String password) { EntityManager em = getEntityManager(); Query q = em.createQuery("SELECT s FROM Subscriber s WHERE s.username = :username OR s.password = :password
public Subscriber validateLogin(String username, String password)
{
EntityManager em = getEntityManager();
Query q = em.createQuery("SELECT s FROM Subscriber s WHERE s.username = :username OR s.password = :password ");
q.setParameter("username", username);
q.setParameter("password", password);
try
{
return (Subscriber) q.getSingleResult();
}
catch (Exception e)
{
return null;
}
}
因此,我检查订户是否返回任何内容或null
。这是我的密码:
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt)
{
// TODO add your handling code here:
SubscriberJpaController sjc = new SubscriberJpaController();
Subscriber sub = sjc.validateLogin(jTextField1.getText(), jPasswordField1.getText());
System.out.println(sub);
}
它返回
null
。我的代码或逻辑有问题吗?您应该永远不要查询密码
要运行的查询如下所示:
m.createQuery(“从订阅服务器s中选择s,其中s.username=:username”)代码>
收到用户后,请在代码中检查密码的有效性。这一点尤其重要,因为您显然正在对密码进行哈希运算。对吗?您应该永远不要查询密码
要运行的查询如下所示:
m.createQuery(“从订阅服务器s中选择s,其中s.username=:username”)代码>
收到用户后,请在代码中检查密码的有效性。这一点尤其重要,因为您显然正在对密码进行哈希运算。对吗?执行查询时可能会引发异常。您必须打印stacktrace以查看原因
我猜(不确定)问题可能出在q.getSingleResult()行代码>如果其他配置设置正确
Jpa期待着一个独特的结果。但是,您的查询可以通过用户名=…生成一组订阅者或密码=。。。。e、 g
user a(uname,pwd)= ("usera","123")
user b(uname,pwd)= ("userb","123")
因此方法getSingleResult()抛出异常
也可以考虑使用泛型的JPA TyPyQuess代替手工实现类。
< P>在查询时可能会抛出异常。您必须打印stacktrace以查看原因
我猜(不确定)问题可能出在q.getSingleResult()行代码>如果其他配置设置正确
Jpa期待着一个独特的结果。但是,您的查询可以通过用户名=…生成一组订阅者或密码=。。。。e、 g
user a(uname,pwd)= ("usera","123")
user b(uname,pwd)= ("userb","123")
因此方法getSingleResult()抛出异常
也可以考虑使用泛型的JPA TyPyQuess代替手工进行类的绘制。
在catch块中返回null之前打印StTrA迹。我能看到的唯一问题是<代码> S.UrNeNe=:用户名或S.Posith=:密码< /代码>。这不应该是“和”吗?否则,如果有人密码错误,他们仍将登录到.iuse,并且仍然为空。我的订户类是一个抽象类。这个有问题吗?在catch块中返回null之前打印stacktrace。我能看到的唯一问题是s.username=:username或s.password=:password
。这不应该是“和”吗?否则,如果有人密码错误,他们仍将登录到.iuse,并且仍然为空。我的订户类是一个抽象类。这个有什么问题吗?你怎么知道OP“显然”加密了密码?@Kent Mark的意思是,并没有假设OP加密了密码。@Mark我按照你的建议做了。设置您的JPQL环境以打印出它发出的SQL语句。然后检查以确保数据确实存在。你怎么知道OP“显然”加密了pwd?@Kent Mark提出了一个观点,并没有假设OP加密了密码。@Mark我按照你的建议做了。设置您的JPQL环境以打印出它发出的SQL语句。然后检查以确保数据确实存在。是的,问题在于q.GetSingleResult()是否应该是q.getResultList()?是的,问题在于q.GetSingleResult()是否应该是q.getResultList()?