Requisiti: Il progetto deve modificare dinamicamente i parametri della richiesta, assegnare i valori ai parametri della richiesta secondo i permessi dell'utente corrente, prima che i parametri entrino nel metodo controller, deve essere completata la modifica dei parametri della richiesta e, quando il controller chiama il livello di servizio, i parametri della richiesta possono essere utilizzati come condizioni per interrogare e modificare i dati. Ci sono due casi di parametri di richiesta:
- Per gli utenti con privilegi elevati, puoi utilizzare i valori effettivamente richiesti dei parametri
- Per le persone con permessi solo parziali, i valori dei parametri di richiesta vengono modificati dinamicamente in base alle informazioni legate all'utente corrente
All'inizio volevo implementarlo tramite un filtro, ma era troppo macchinoso serializzare e deserializzare il contenuto delle richieste, e richiedeva anche molto giudizio logico e perdita di prestazioni. Fortunatamente, Spring offre funzionalità AOP orientata ai volti, che può essere implementata con codice semplice.
Prima di tutto, il progetto Maven pom.xml deve introdurre il pacchetto spring-boot-starter-aop, come segue:
Una volta introdotto il pacchetto, possiamo utilizzare la funzione AOP, tramite@Aspectannotazione.
Aspect supporta 5 tipi di annotazioni di notifica:
@Before: Pre-notifica, che viene eseguita prima che il metodo venga eseguito
@After: Post-notifica, eseguita dopo l'esecuzione del metodo
@AfterRunning: Restituisce una notifica, che viene eseguita dopo che il metodo restituisce un risultato
@AfterThrowing: Notifica eccezione, dopo che il metodo ha lanciato un'eccezione
@Around: Notifiche wraparound, circa l'esecuzione del metodo
Crea una Request.java classe generica di richieste:
Crea una nuova classe di dati UserInfo.java richiedi specifica:
Se l'intestazione della richiesta corrente ha un appid, il valore del parametro di richiesta appId verrà modificato, altrimenti il parametro di richiesta non sarà modificato, il codice è il seguente:
Crea un nuovo controller HomeController e aggiungi un'interfaccia con un parametro richiesta contenente Request<UserInfo>, il codice è il seguente:
Nel caso di test senza l'intestazione di richiesta appId, il parametro di richiesta appId è il valore effettivo e non è stato modificato, come mostrato nella figura seguente:
Se provi ad aggiungere l'intestazione di richiesta appId, puoi vedere che il parametro di richiesta appId è stato modificato con successo, come mostrato nella figura seguente:
Infine, allega il codice sorgente:Il login del link ipertestuale è visibile.
|