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:lu06:b [2025/09/23 01:18] – apeter | de:modul:ffit:3-jahr:java:learningunits:lu06:b [2025/09/23 10:02] (aktuell) – apeter | ||
|---|---|---|---|
| Zeile 48: | Zeile 48: | ||
| Implementieren Sie eine PUT-API, welche als JSON-Body das alte Passwort (" | Implementieren Sie eine PUT-API, welche als JSON-Body das alte Passwort (" | ||
| - | Bei der Authorization wird ein zuvor generiertes JWT mitgegeben. | + | Bei der Authorization wird ein zuvor generiertes JWT mitgegeben. Der " |
| {{: | {{: | ||
| + | Die Implementation könnte grob so aussehen: | ||
| + | <code java> | ||
| + | String authHeader = ctx.header(" | ||
| + | ... | ||
| + | String token = authHeader.substring(" | ||
| + | ... | ||
| + | |||
| + | Claims claims = Jwts.parser() | ||
| + | .verifyWith(JWT_KEY) // This includes the verification | ||
| + | .build() | ||
| + | .parseSignedClaims(token) | ||
| + | .getPayload(); | ||
| + | Integer userId = claims.get(" | ||
| + | |||
| + | ... | ||
| + | |||
| + | var json = ctx.bodyValidator(Map.class) | ||
| + | .check(m -> m.containsKey(" | ||
| + | .check(m -> m.containsKey(" | ||
| + | .get(); | ||
| + | |||
| + | String oldPassword = (String) json.get(" | ||
| + | String newPassword = (String) json.get(" | ||
| + | |||
| + | ... // TODO: find user by id | ||
| + | |||
| + | byte[] storedSalt = Base64.getDecoder().decode(user.getPasswordSalt()); | ||
| + | byte[] storedHash = Base64.getDecoder().decode(user.getPasswordHash()); | ||
| + | ... | ||
| + | if (PasswordHandler.verifyPassword(oldPassword, | ||
| + | byte[] newHash = PasswordHandler.hashPassword(newPassword, | ||
| + | user.setPasswordHash(Base64.getEncoder().encodeToString(newHash)); | ||
| + | |||
| + | userPersistor.save(user); | ||
| + | ctx.json(Map.of(" | ||
| + | } | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | Testen Sie die Implementation manuell mit Postman. | ||