@PreFilter
e @PostFilter
sono progettati per essere utilizzati con Spring Security per poter filtrare raccolte o array in base all'autorizzazione.
Per avere questo lavoro, è necessario utilizzare il controllo di accesso basato su espressione nella sicurezza primavera (come si deve nel tuo esempio)
@PreFilter - filtra la raccolta o l'array prima di metodo di esecuzione.
@PostFilter - filtra la raccolta o gli array restituiti dopo l'esecuzione del metodo.
Quindi, supponiamo che il tuo getUser()
restituisca Elenco utenti. Spring Security eseguirà l'iterazione dell'elenco e rimuoverà tutti gli elementi per cui l'espressione applicata è falsa (ad esempio non è admin e non dispone dell'autorizzazione di lettura)
filterObject è un oggetto incorporato su cui viene eseguita l'operazione di filtro ed è possibile applicare condizioni diverse a questo oggetto (in pratica tutte le espressioni built-in sono disponibili qui, ad esempio principal
, authentication
), ad esempio, si può fare
@PostFilter ("filterObject.owner == authentication.name")
Anche se questi filtri sono utili, è davvero inefficiente con grandi insiemi di dati, e in pratica perdi il controllo sul risultato, invece Spring controlla il risultato.