java - 代码比较登录名和密码

标签 java jsf

我编写了一个简单的代码来测试登录名和密码,(登录名和密码由用户给出),然后我通过存储在数据库中的登录名和密码进行比较。但问题是函数返回错误的结果(它浏览所有行,即使第一行为真) 这是代码:

public String LoginPasswordCheck(Connection con) 
{ 
    HashMap<String,String> mapLoginPWD = new HashMap<String,String> ();
    String sqlLogin;
    String checkaccess="true";
    String log;
    String pwd; 
     sqlLogin="select login ,password from profil_user;";

    try{
   st=(PreparedStatement) con.prepareStatement(sqlLogin);
   ResultSet rs1 = st.executeQuery();

   while(rs1.next())
    {
      log = rs1.getString("login");
      pwd=rs1.getString("password");
      mapLoginPWD.put(log, pwd);
   } 

Iterator iteratorkey = mapLoginPWD.keySet().iterator(); 
String myKey="";
String value="";

while(iteratorkey.hasNext())
{
 myKey = (String) iteratorkey.next();
 value= mapLoginPWD.get(myKey);
 //login and password given by the user
 if( !(this.login.equalsIgnoreCase(myKey)) && !(this.password.equalsIgnoreCase(value) )&& !(iteratorkey.hasNext()) )
  {
          checkaccess ="fail";
  }
else

             checkaccess ="success"; 
}

}
 catch (SQLException e)
    {
       e.printStackTrace();
    }     
return checkaccess;
 } 

最佳答案

我不明白为什么您要为每个请求加载登录名和密码的映射。您可以只加载给定登录名的密码,如果失败,则该登录名不存在。

此外,我想知道您是否真的想忽略密码和登录名的大小写。

您提供的代码失败,因为当您找到匹配的登录名/密码时没有退出循环。

您确实应该重构代码并消除对映射和循环的需要。正如我所说,只需查找用户在数据库中显示的登录名即可。

关于java - 代码比较登录名和密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6324669/

相关文章:

java - 当 Selenium Job 通过 Ant 运行时,ExtentReports 导致失败

java - java中泛型类中的double方法

eclipse - 停止 Eclipse 在文件保存时重新启动我的 Web 应用程序

JSF2 无法从 ViewScoped 作为 ManagedProperty 访问 SessionScoped bean

java - JSF 和 ui 中的嵌套 ajax :repeat

java - Google App Engine 数据存储区中的命名空间

java - 是否可以将自定义信任库与 SOAPConnection 一起使用?

java - 搜索数组列表

jsf - 将用户从 f :event listener method 重定向到不同的页面

maven - JSF 和 Richfaces/Primefaces - Maven - Netbeans 8.0.1 - Glassfish 4.1