@PreFilter
und @PostFilter
sind für die Verwendung mit Spring-Sicherheit vorgesehen, um Sammlungen oder Arrays basierend auf der Autorisierung filtern zu können.
diese Funktion haben, müssen Sie die Expression-basierte Zugriffskontrolle im Frühjahr Sicherheit verwenden (wie Sie in Ihrem Beispiel haben)
@PreFilter - filtert die Sammlung oder Arrays vor Methode ausgeführt wird.
@PostFilter - filtert die zurückgegebene Sammlung oder Arrays nach dem Ausführen der Methode.
Also, lassen Sie uns sagen Ihre getUser()
gibt Liste der Benutzer zurück. Spring Security durchläuft die Liste und entfernt alle Elemente, für die der angewendete Ausdruck falsch ist (z. B. ist nicht admin und hat keine Leseberechtigung)
filterObject ist ein integriertes Objekt, auf dem die Filteroperation ausgeführt wird und Sie können gelten verschiedene Bedingungen auf dieses Objekt (im Grunde alle Einbau-Ausdrücke hier zur Verfügung stehen, zB principal
, authentication
), zum Beispiel können Sie tun
@PostFilter ("filterObject.owner == authentication.name")
Obwohl diese Filter nützlich sind, ist es mit großen Datenmengen wirklich ineffizient ist, und im Grunde verlieren Sie die Kontrolle über Ihr Ergebnis, stattdessen steuert Spring das Ergebnis.