PSQLException: jeu de résultats n'est pas positionné correctement, vous devrez peut-être l'appel suivant

public UserBean authenticate(String username,String password){
PostGresDAO pg=new PostGresDAO();   //creates new connection
Connection conn=pg.getConnecion();  //return connection object
PreparedStatement ps;
ResultSet rs;
String query="select password,name from scg_users where username=?";
UserBean ub=null;
boolean authenticated=false;
try{
ps=conn.prepareStatement(query);
ps.setString(1, username);
rs=ps.executeQuery();
if(rs!=null){
authenticated=password.equals(rs.getString(1));  //exception raised here
if(authenticated){
ub=new UserBean();
ub.setUser(rs.getString(2));
ub.setUsername(username);
}
}
}
catch(SQLException e){
e.printStackTrace();
}
return ub;
}

Je suis en utilisant ce code pour authentifier un utilisateur. Le nom d'utilisateur et mot de passe sont extraites à partir du paramètre de la requête et transmis à cette méthode pour l'authentification. Mais il jette un:

org.postgresql.util.PSQLException: ResultSet not positioned properly, perhaps you need to call next.

S'il vous plaît conseils.

S'il vous plaît, veuillez, s'il vous plaît ne pas stocker les mots de passe en texte clair. Le sel de mer et de hachage avec un décent de hachage à sens unique. Mieux encore, ne pas écrire de l'authentification de l'utilisateur code vous-même, utiliser les code testé par authentification qui convient avec une bibliothèque ou d'un conteneur, ou via un service comme SASL avec CRAM-MD5 défi-réponse, ou avec Kerberos. De cette façon, vous n'avez jamais besoin de voir le mot de passe utilisateur à tous. Voir par exemple crackstation.net/hashing-security.htm pour les mots de passe.
Puisque vous êtes à l'aide de Java, vous devriez regarder dans JSSE, Java GSS, ou de Java SASL. Ne pas écrire votre propre schéma d'authentification.
Voir aussi stackoverflow.com/questions/5322055/password-encryption
Merci lottttt pour me guider dans la bonne direction. 🙂

OriginalL'auteur Mono Jamoon | 2012-08-24