2013-04-28 38 views
1

我试图验证用数据库中的数据输入JSP页面中的用户名和密码,所有参数即将到来,但即使匹配数据,函数返回false。我的错是什么?检查您的登录名和密码(Java Web,Servlets)

这里是我的代码:

public class LoginService { 
    public boolean loginCheck(String username, String password){ 
     String query; 
     String dbUsername, dbPassword; 
     boolean login = false; 

     try { 
      Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/blog_u", "root", "root"); 
      Statement stmt = (Statement) con.createStatement(); 
      query = "SELECT username, password FROM user;"; 
      stmt.executeQuery(query); 
      ResultSet rs = stmt.getResultSet(); 

      while(rs.next()){ 
       dbUsername = rs.getString("username"); 
       dbPassword = rs.getString("password"); 

       if(dbUsername == username && dbPassword == password){ 
        System.out.println("OK"); 
        login = true; 
       } 
       System.out.println(username + password + " " + dbUsername + dbPassword); 
      } 
     } catch (InstantiationException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     return login; 
    } 
} 
+6

不要用'=='比较字符串。使用方法equals()' – 2013-04-28 15:41:37

+1

密码永远不应该存储在字符串中。 [它们应该存储在'char []']中(http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords)。 – syb0rg 2013-04-28 15:47:04

+0

或者(在这种情况下,因为你有纯文本密码)让数据库为你比较它们。在你的SQL查询中添加一个带有用户名和密码的“where”子句,并检查它是否返回一些东西。如果是这样,用户的详细信息是正确的。 – 2013-04-28 15:49:38

回答

3
if(dbUsername == username && dbPassword == password){ 

应更改为

if(dbUsername.equals(username) && dbPassword.equals(password)){ 

字符串不应在Java中使用==进行比较。见How do I compare strings in Java?