Вам не нужно while (rs.next())
, потому что ваш PreparedStatement
уже запросил набор результатов, используя заданные вами имя пользователя и пароль.Вместо этого используйте оператор if
для проверки результирующего набора: -
// returns AuthenticatedUser object if authentication is successful, otherwise null
public AuthenticatedUser authenticate(String username, String password) {
PreparedStatement st = ...;
st.setString(1, username);
st.setString(2, password);
ResultSet rs = st.executeQuery();
AuthenticatedUser user = null;
//login valid because there is something from the result set, then create user object
if (rs.next() ) {
// set all the useful user information in this POJO
user = new AuthenticatedUser(username, rs.getString("name"), rs.getString("whatever_important_info"));
}
... // close resultset, preparedStatement, connection, clean up, etc.
return user;
}
С вашего сервера / контроллера вы можете сделать что-то подобное для обработки перенаправления страницы: -
// call the method above to get the user object based on the provided username and password
AuthenticatedUser user = dao.authenticate(username, password);
// successful authentication
if (user != null) {
// set user object in session so that you don't need to query the database for user info again and again
session.setAttribute("user", user);
// redirect to welcome page
request.getRequestDispatcher("/your-welcome-page").forward(request, response);
}
else {
// redirect to login page if authentication fails
request.getRequestDispatcher("/login-page").forward(request, response);
}