Hallo,
Ich habe ein Problem zu lösen, das mir momentan echte Kopfschmerzen bereitet. Wir haben derzeit JpaRepositories und Hibernate am Laufen. In einem Controller soll - als zweite Sicherheitsinstanz - nochmal geprüft werden, ob eine Entität bereits in der Datenbank existiert. Maßgebend hierbei ist nicht die UUID des Objekts (diese kann abweichen, da das Objekt vom Client rüberkommt und es sich vielleicht um ein neues Objekt handelt, das fälschlicherweise an den Sicherheitsmechanismen vorbeigekommen ist), sondern ein bestimmtes Field dieses Objekts - dieses muss eindeutig sein.
Die entsprechende Prüfung im Controller sieht wie folgt aus:
Nun hat sich folgendes Problem ergeben:
Bisher bin ich bei meinen Recherchen nur darauf gestoßen, dass Leute das genaue Gegenteil haben wollen.
Ich wäre hier für einen Ratschlag sehr dankbar.
Mit besten Grüßen
SimProtect
Ich habe ein Problem zu lösen, das mir momentan echte Kopfschmerzen bereitet. Wir haben derzeit JpaRepositories und Hibernate am Laufen. In einem Controller soll - als zweite Sicherheitsinstanz - nochmal geprüft werden, ob eine Entität bereits in der Datenbank existiert. Maßgebend hierbei ist nicht die UUID des Objekts (diese kann abweichen, da das Objekt vom Client rüberkommt und es sich vielleicht um ein neues Objekt handelt, das fälschlicherweise an den Sicherheitsmechanismen vorbeigekommen ist), sondern ein bestimmtes Field dieses Objekts - dieses muss eindeutig sein.
Die entsprechende Prüfung im Controller sieht wie folgt aus:
Java:
public User createUser(User user) {
User existingUser = this.userRepository.findFirstByUsername(user.getUsername());
if (existingUser == null) {
return this.userRepository.save(user);
} else {
return null;
}
}
Nun hat sich folgendes Problem ergeben:
- Wir erstellen zunächst einen User mit dem Usernamen "EinNutzer". Dieser wird korrekt in der Datenbank hinterlegt
- Wir versuchen nun einen User mit dem Usernamen "EinNutzer " (<- Leerzeichen am Ende) zu erstellen. Durch unsere GUI kommt das auch sauber durch, weil eine derartige Unterscheidung derzeit nicht durch die Anforderungen ausgeschlossen sind und wir dem eigentlichen Nutzer nicht die Möglichkeit nehmen sollen, auch solche Dinge zu tun.
Die oben hinterlegte Methode jedoch legt den User nicht an, da es ihn bereits gibt.
Offensichtlich sind in der Logik "EinNutzer" und "EinNutzer " gleich, denn das gibt uns das JPARepository zurück, wenn ich den zweiten String auf die Datenbank loslasse.
Bisher bin ich bei meinen Recherchen nur darauf gestoßen, dass Leute das genaue Gegenteil haben wollen.
Ich wäre hier für einen Ratschlag sehr dankbar.
Mit besten Grüßen
SimProtect