Hallo Forum,
als ganz neues Mitglied habe ich gleich mal ein Problem, das aus einem massiven Verständnisproblem meinerseits zu resultieren scheint.
Folgende Situation: Ich habe eine hibernate-Klasse namens User und in dieser Klasse ein Attribut namens password.
Grundsätzlich funktioniert erstmal alles, ich kann über ein Objekt meiner Klasse Daten in der Datenbank speichern und auch wieder abrufen. Das Problem begann damit, dass ich nun mein password als md5 Hash in der Datenbank speichern wollte und mir gedacht habe, dass könnte man doch super in die Setter-Methode integrieren, nämlich so:
Soweit so gut, das Kennwort wird beim anlegen eines neuen Users nun als MD5 Hasch in der Datenbank abgelegt, alles prächtig. Nun kam ich aber irgendwann an den Punkt, dass ich über den bekannten Benutzernamen die zugehörige ID aus der DB holen wollte. Das mache ich so:
Auch das funktioniert prächtig. Nun habe ich aber gerade festgestellt, dass bei genau diesem Zugriff der md5 Hash des Kennworts aus der Datenbank gelesen wird, erneut durch die md5 Maschine läuft und dann irgendwann doppelt und dreifach gehasht in der DB steht.
Das ich das Problem relativ leicht lösen könnte, indem ich den Hash an einer anderen Stelle erzeuge, ist mir klar, mir geht es nun aber ums Verständnis! Was mir völlig unklar ist: Warum wird überhaupt irgendwas in die DB zurück geschrieben. An der Stelle möchte ich ja eigentlich nur lesend auf die Datenbank zugreifen! Und ein session.save(user) steht da ja nicht. ???:L
Wird denn jedes Mal, wenn ich auf diese Weise zugreife etwas in die DB zurück geschrieben oder liegt das nur daran, dass sich ja mein password quasi geändert hat? Aber selbst dann sollte das doch ein rein lesender Zugriff sein?
So, nun hoffe ich, dass ich mich verständlich ausgedrückt habe und dass Ihr Licht meine Umnachtung bringen könnt.
Ich wünsche Euch ein schönes Wochenende!
als ganz neues Mitglied habe ich gleich mal ein Problem, das aus einem massiven Verständnisproblem meinerseits zu resultieren scheint.
Folgende Situation: Ich habe eine hibernate-Klasse namens User und in dieser Klasse ein Attribut namens password.
Grundsätzlich funktioniert erstmal alles, ich kann über ein Objekt meiner Klasse Daten in der Datenbank speichern und auch wieder abrufen. Das Problem begann damit, dass ich nun mein password als md5 Hash in der Datenbank speichern wollte und mir gedacht habe, dass könnte man doch super in die Setter-Methode integrieren, nämlich so:
Java:
public class User {
private String password;
public String getpassword() { return password; }
public void setpassword(String password) {
StringBuffer stringBuffer = new StringBuffer(32);
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(password.getBytes());
Formatter f = new Formatter(stringBuffer);
for (byte b :md5.digest()) {
f.format("%02x", b);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
password = stringBuffer.toString();
}
}
Soweit so gut, das Kennwort wird beim anlegen eines neuen Users nun als MD5 Hasch in der Datenbank abgelegt, alles prächtig. Nun kam ich aber irgendwann an den Punkt, dass ich über den bekannten Benutzernamen die zugehörige ID aus der DB holen wollte. Das mache ich so:
Java:
Session session = SessionFactoryUtil.getInstance().getCurrentSession();
Transaction transaction = null;
transaction = session.beginTransaction();
Query q = session.createQuery("from User u where u.login = :login");
q.setString("login", username); // den username habe ich an dieser Stelle aus der Session
java.util.List User = q.list();
transaction.commit();
for (Iterator iter = User.iterator(); iter.hasNext();) {
User element = (User) iter.next();
res = element.getUSERID();
}
Auch das funktioniert prächtig. Nun habe ich aber gerade festgestellt, dass bei genau diesem Zugriff der md5 Hash des Kennworts aus der Datenbank gelesen wird, erneut durch die md5 Maschine läuft und dann irgendwann doppelt und dreifach gehasht in der DB steht.
Das ich das Problem relativ leicht lösen könnte, indem ich den Hash an einer anderen Stelle erzeuge, ist mir klar, mir geht es nun aber ums Verständnis! Was mir völlig unklar ist: Warum wird überhaupt irgendwas in die DB zurück geschrieben. An der Stelle möchte ich ja eigentlich nur lesend auf die Datenbank zugreifen! Und ein session.save(user) steht da ja nicht. ???:L
Wird denn jedes Mal, wenn ich auf diese Weise zugreife etwas in die DB zurück geschrieben oder liegt das nur daran, dass sich ja mein password quasi geändert hat? Aber selbst dann sollte das doch ein rein lesender Zugriff sein?
So, nun hoffe ich, dass ich mich verständlich ausgedrückt habe und dass Ihr Licht meine Umnachtung bringen könnt.
Ich wünsche Euch ein schönes Wochenende!