La mia applicazione web al momento accetta richieste REST e gestite tramite alcuni controller, che chiamano i servizi corrispondenti per eseguire la logica.
Ora voglio aggiungere alcune regole di sicurezza prima di chiamare i servizi. Ciò include la verifica della possibilità di accedere a un servizio ANCHE modificare il corpo della richiesta, se necessario. Ho difficoltà a decidere dove e come aggiungere questo livello di sicurezza.
La soluzione 1 consiste nel creare versioni sicure per ciascuno dei servizi, avvolgere il servizio originale e sostituirli in ciascuno dei controller. Esporre solo i servizi protetti e rendere i servizi originali privati / pacchetti protetti. In questo modo tutti i miei servizi rimangono separati nei propri moduli e la sicurezza viene applicata. Ma posso anche solo aggiornare i servizi, senza avere un ulteriore livello?
La soluzione 2 è quella di creare un singolo servizio di sicurezza e prende le richieste di servizio dai controllori, esegue i controlli di sicurezza, modifica il corpo della richiesta, quindi invia le richieste aggiornate ai servizi corrispondenti. In questo modo posso avere solo un modulo di sicurezza e la sicurezza è applicata, ma questo modulo deve conoscere ognuno dei servizi per inviare i servizi corretti.
La soluzione 3 consiste nel creare un singolo servizio di sicurezza e lasciare che i controllori corrispondenti lo usino a proprio piacimento. In altre parole, il singolo controller gestisce parte della logica di sicurezza. per esempio. un controllore chiama il controllo di sicurezza, quindi passa nel corpo della richiesta per ottenere la richiesta modificata prima di chiamare il servizio. In questo modo posso avere solo un modulo di sicurezza e questo modulo non ha bisogno di conoscere ognuno dei servizi, ma non sta proteggendo alcun servizio e agisce proprio come una classe di utilità. Ad esempio, non vi è alcun obbligo per il nuovo controllore di passare attraverso questa logica di sicurezza.
Esiste una soluzione in grado di rafforzare la sicurezza, rimanere nel proprio modulo e nessuna dipendenza dai servizi esistenti?