- Updated task status to `DONE` with completion date. - Checked off all implemented steps: security module, persistence layer, ping service hardening, and gateway integration. - Reflected task progress and implementation outcomes in the document.
3.5 KiB
3.5 KiB
| type | status | owner | created | completed | priority | context |
|---|---|---|---|---|---|---|
| Task | DONE | Senior Backend Developer | 2026-01-15 | 2026-01-16 | HIGH | Operation Tracer Bullet (Phase 1) |
Arbeitsanweisung: Infrastructure Hardening & Security Implementation
Ziel: Finalisierung der Backend-Infrastruktur-Module und Härtung des ping-service gemäß ADR 001.
1. Kontext & Architektur-Entscheidungen
Wir befinden uns in Phase 1 ("Tracer Bullet"). Das Ziel ist ein stabiler, sicherer Durchstich vom Frontend bis zur Datenbank. Die Architektur wurde wie folgt geschärft (siehe ADR 001):
- Persistence: Hybrid-Ansatz (JPA für Writes/Entities, Exposed für komplexe Reads).
- Security: Zentralisiertes Modul (
backend/infrastructure/security). - Messaging: Kafka ist für Phase 1 out of scope. Fokus auf REST.
- Migration: Flyway Skripte liegen direkt im Service (
db/migration).
2. Deine Aufgaben (Checkliste)
A. Security Module (backend/infrastructure/security)
Dieses Modul wurde neu angelegt. Fülle es mit Leben.
- Security Configuration:
- Erstelle eine
SecurityConfig-Klasse, dieSecurityFilterChainkonfiguriert. - Implementiere OAuth2 Resource Server Support (JWT Validierung).
- Definiere globale CORS-Regeln (Frontend darf zugreifen).
- Erstelle eine
- Role Converter:
- Implementiere einen
KeycloakRoleConverter, der die Rollen aus dem JWT (Realm/Resource Access) in Spring SecurityGrantedAuthoritymapping.
- Implementiere einen
- Wichtig: Achte auf Kompatibilität. Das Gateway nutzt WebFlux (Reactive), die Services nutzen WebMVC (Servlet). Falls nötig, trenne die Konfigurationen oder nutze
ConditionalOnWebApplication.
B. Persistence Layer (backend/infrastructure/persistence)
Das Modul ist bereits konfiguriert.
- Verwendung im Service:
- Stelle sicher, dass der
ping-servicedieses Modul nutzt. - Implementiere
PingEntityals JPA Entity. - Nutze
JpaRepositoryfür Standard-CRUD-Operationen.
- Stelle sicher, dass der
C. Ping Service Hardening (backend/services/ping/ping-service)
Mache den Service "Production Ready."
- Flyway:
- Erstelle
src/main/resources/db/migration/V1__init_ping.sql. - Definiere das Schema für die
pingTabelle.
- Erstelle
- API Implementation:
- Implementiere
/ping/public(offen) und/ping/secure(benötigt Auth). - Nutze
@PreAuthorize("hasRole('MELD_USER')")o.ä. zum Testen der Rollen.
- Implementiere
- Resilience:
- Konfiguriere Resilience4j (CircuitBreaker) für die DB-Verbindung (via
application.yml).
- Konfiguriere Resilience4j (CircuitBreaker) für die DB-Verbindung (via
D. Gateway Integration (backend/infrastructure/gateway)
- Routing:
- Prüfe die
application.ymlim Gateway. - Stelle sicher, dass Routen zum
ping-servicekorrekt konfiguriert sind (via Service Discovery "ping-service").
- Prüfe die
3. Definition of Done
- Das Projekt kompiliert fehlerfrei (
./gradlew build). docker compose upstartet Gateway, Ping-Service, Keycloak und Postgres ohne Fehler.- Ein Request auf
http://localhost:8080/ping/public(via Gateway) liefert 200 OK. - Ein Request auf
http://localhost:8080/ping/secureohne Token liefert 401 Unauthorized. - Die Datenbank-Tabelle
pingwurde durch Flyway automatisch erstellt.
Referenzen: