1. 2024-09-13 http-Filter
-
Ein Filter kann den Request überprüfen bzw den Response ändern
-
in der Cloud können wir keine Cookies verwenden, da diese am Client liegen. Der Server muss immer in der DB nachschauen (oder der Client müsste immer zum selben Server groutet werden) → das wäre zu langsam.
-
Sticky Session sind nicht optimal, da der LoadBalancer den Client immer zum selben Pod schicken würde.
-
Lösungen wie Keycloak verwenden trotzdem Cookies (ist performancemäßig egal, da man sich eh nicht so oft authentifiziert → ebenfalls DB-Zugriff)
-
2. 2024-09-20
2.1. container request filter
-
Prüft, ob im Header die Authentifizierung (wer bin ich) passt.
…
Problem:
-
Die zwei Filter sind unabhängig
-
Wir müssen jedoch username und password vom Authentication Filter zum Authorization Filter übergeben
-
Dazu verwenden wir den ContainerRequestContext
HÜ:
-
Unit-Tests erstellen mit rest-assured
-
beim Login Session in DB erstellen (Cookies in DB speichern)
-
wir verwenden als DB H2
4. Aufgabenstellung
-
ein User-Tabelle wird erstellt (Password hashen und salten) und auch Session-Tabelle
-
eigene Annotation @AllowAll wird erstellt
-
Ablauf
-
nach Überprüfen des Usernames und Password wird eine Session in die DB eingetragen mit FK auf User
-
die Session erhält eine UUID und einen Zeitstempel (Gültigkeit zB 1h)
-
die Session wird nun mit Set-Cookie an den Browser gesendet
-
die Browser senden nun dieses Cookie bei jedem Request an den Endpoint zurück
-
im Authentication-Filter (wer bin ich) wird aus dem Cookie der User durch DB-Zugriff festgestellt.
-
-
HÜ
-
Was haben wir bisher:
-
Wir haben einen Login-Request mit AllowAll
-
Alles wird durchgelassen, es wird in der Datenbank eine Session erstellt.
-
Als Response des Login-Requests wird ein Cookie dem Browser übergeben
-
Bei jeden (hello-) Request wird ein Cookie mitgesendet.
-
-
Was ist zu tun?
-
Bei jedem neuen Request wird aus der Session Tabelle der User herausgeholt (Wer bin ich - Filter)
-
Diese User-Credentials werden in den Context-Properties gespeichert.
-
Im Was darf ich - Filter wird für jeden Endpoint kontrolliert, ob eine User Id vorhanden ist
-
-
Kommende Woche
-
@RolesAllowed
-
Rollenkonzept einführen
-
-