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;
}
}
不要用'=='比较字符串。使用方法equals()' – 2013-04-28 15:41:37
密码永远不应该存储在字符串中。 [它们应该存储在'char []']中(http://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords)。 – syb0rg 2013-04-28 15:47:04
或者(在这种情况下,因为你有纯文本密码)让数据库为你比较它们。在你的SQL查询中添加一个带有用户名和密码的“where”子句,并检查它是否返回一些东西。如果是这样,用户的详细信息是正确的。 – 2013-04-28 15:49:38