‏ ‏ ‎ ‏ ‏ ‎

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

  • Labs-Ordner im GitHub

HÜ:

  • Unit-Tests erstellen mit rest-assured

  • beim Login Session in DB erstellen (Cookies in DB speichern)

  • wir verwenden als DB H2

3. 2024-09-27

3.1. Betriebsmodi für Datenbanken

image::betriebsmodi-datenbanken.png

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.

    • 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

5. @Provider in JAX-RS

6. @Produces von CDI

  • https://weld.cdi-spec.org/

  • Eine Objekt wird beim @Inject nicht vom Container instanziert, sondern meine Funktion mit "new" wird verwendet