0

Unsere Spring Boot 1.3.3 Anwendung verwendet Spring Security. Wir müssen HTTP-Anfragen einschließlich der angeforderten URL, des HTTP-Verbs, der Verarbeitungszeit und des Benutzerprinzipals protokollieren.Servlet Principal in Filter mit hoher Priorität, mit Spring Security

Dies geschieht mit einem benutzerdefinierten Servlet-Filter.

Der benutzerdefinierte Filter muss höhere Vorrang (d. H. Kleinere Reihenfolge) als Spring Security-Filterkette haben, andernfalls wird er für Anfragen, die von Spring Security abgelehnt wurden, nicht ausgeführt.

Aber dann in dem benutzerdefinierten Filter ist HttpServletRequest: GetUserPrincipal immer Null. Es scheint, dass Spring Security Sicherheitsinformationen entfernt, sobald seine Sicherheitskette abgeschlossen ist.

Gibt es einen Standard Weg (bedeutet ohne lokale Magie des Fadens), um immer den Benutzerprinzipal von einem kundenspezifischen Filter zu erhalten, wenn Spring Security verwendet wird?

Vielen Dank für Ihre Zeit.

Antwort

1

Nun, da Sie Spring Security verwenden, wird der Principal wahrscheinlich genau von der Spring Security-Maschine eingestellt. Was noch schlimmer ist, ist, dass es das Wrapping von Anforderungen verwendet, so dass Sie den Principal weder vor dem Aufruf des FilterChain finden, weil er noch nicht gesetzt wurde, noch nachdem er in einem HttpServletRequestWrapper gesetzt wurde, der nicht mehr hier ist.

Also IMHO Ihre beste Wahl ist, einen benutzerdefinierten Filter in die Spring Security-Kette, kurz vor der ExceptionTranslationFilter, Protokoll nach der Verkettung und jede Ausnahme übergeben.

Verwandte Themen