Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| de:modul:ffit:3-jahr:java:learningunits:lu04:b [2025/08/29 11:30] – apeter | de:modul:ffit:3-jahr:java:learningunits:lu04:b [2025/09/22 14:09] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== LU04b - Optimierungen und Refactoring 2 (Design-Patterns) | + | ====== LU04b - Benutzer |
| - | ==== Design-Patterns | + | ==== Benutzer |
| - | Es gibt zahlreiche Design-Patterns. Diese werden | + | **Anforderung 5**: Es soll erfasst |
| - | ^Creational Design Patterns ^Structural Design Patterns ^Behavioral Design Patterns | | + | Dazu werden Benutzer benötigt. Erstellen Sie eine entsprechende Klasse '' |
| - | |Factory Method|Adapter|Chain of Responsibility| | + | * id |
| - | |Abstract Factory|Bridge|Command| | + | * firstname |
| - | |Builder|Composite|Iterator| | + | * lastname |
| - | |Prototype|Decorator|Mediator| | + | * dateOfBirth |
| - | |Singleton|Facade|Memento| | + | |
| - | | |Flyweight|Observer| | + | * passwordHash |
| - | | |Proxy|State| | + | * passwordSalt |
| - | | | |Strategy| | + | |
| - | | | |Template Method| | + | |
| - | | | |Visitor| | + | |
| - | Mehr dazu auf https://refactoring.guru/design-patterns | + | Als nächstes benötigen wir eine Möglichkeit Benutzer anzulegen und abzuspeichern. Erstellen Sie dafür in ihrer Applikation den Befehl '' |
| + | |||
| + | Anstatt dem Salt und dem Passwort-Hash wird das Passwort im Klartext angegeben. Der Salt kann beim Erstellen eines neuen Benutzers folgendermassen zufällig generiert werden. Mit dem Salt und dem übergebenen Klartextpasswort wird der Hash berechnet, welcher im Gegensatz zum Klartextpasswort, | ||
| + | |||
| + | <code java> | ||
| + | public static byte[] generateSalt() { | ||
| + | byte[] salt = new byte[16]; | ||
| + | new SecureRandom().nextBytes(salt); | ||
| + | return salt; | ||
| + | } | ||
| + | |||
| + | public static byte[] hashPassword(String password, byte[] salt) throws NoSuchAlgorithmException { | ||
| + | MessageDigest md = MessageDigest.getInstance(" | ||
| + | md.update(salt); | ||
| + | return md.digest(password.getBytes()); | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Um den Hash und den Salt abzuspeichern, | ||
| + | |||
| + | <code java> | ||
| + | byte[] salt = PasswordHandler.generateSalt(); | ||
| + | byte[] hash = PasswordHandler.hashPassword(password, | ||
| + | |||
| + | String saltBase64 = Base64.getEncoder().encodeToString(salt); | ||
| + | String hashBase64 = Base64.getEncoder().encodeToString(hash); | ||
| + | |||
| + | user.setPasswordSalt(saltBase64); | ||
| + | user.setPasswordHash(hashBase64); | ||
| + | </code> | ||
| + | |||
| + | Überprüfen Sie, ob folgende Eingabe einen Benutzer anlegen und in die Datenbank speichern kann. | ||
| + | < | ||
| + | createUser Max Mustermann 1990-05-21 max.mustermann@example.com geheim123 | ||
| + | </code> | ||
| + | |||
| + | Überprüfen Sie Ihren Code ebenfalls mit dem JUnit-Test. | ||