2013-01-31 18 views
25

Utilizzo la sicurezza di primavera con @PreAuthorize sui metodi del mio controller. Il mio ragionamento era che volevo che il controllo dell'autorizzazione si verificasse prevedibilmente in un livello e quanto prima possibile nella richiesta. Tuttavia, ho appena letto la documentazione Spring Security 3 e ho visto che raccomandano di applicare la sicurezza a livello di metodo sul livello di servizio (ma non dicono perché).Le annotazioni a livello del metodo di sicurezza a molla devono essere applicate al livello controller o al livello servizio?

La mia domanda è: dovrebbe scaturire annotazioni livello di metodo di sicurezza da applicare a livello di controller o il livello di servizio? (O "entrambi" o "dipende"?) Ancora più importante: perché?

risposta

13

"Dipende" :). Se la tua applicazione ha un livello di servizio attraverso il quale viene applicata tutta la tua logica aziendale, di solito è un posto pulito dove applicare i vincoli di sicurezza ed essere certo di non aver perso alcun caso d'angolo.

codice Web è in genere più disordinato, c'è più di esso, cambia più rapidamente e si può finire per chiamare gli stessi metodi di servizio da più luoghi. Qualcuno potrebbe aggiungere un nuovo controller e dimenticare di proteggerlo correttamente. In alternativa potresti avere diversi tipi di client che chiamano gli stessi servizi.

Ma dipende da come la vostra applicazione è strutturata e quali sono i vostri casi d'uso sono. Potresti avere una buona argomentazione sul motivo per cui vuoi proteggere un controller.

+0

Grazie, hai menzionato buoni argomenti per mettere la sicurezza sul servizio. Quali considereresti come buoni argomenti per proteggere un controller? Anche per il contesto, l'app che ho in mente ha fondamentalmente un metodo di servizio per endpoint del controller, poiché il mio servizio definisce i limiti delle transazioni. Quindi lo stesso metodo di servizio viene chiamato solo da un posto e non ci sono altri client che utilizzano il servizio. – Jay

+0

Un'altra ragione per cui ho pensato di attribuire l'autorizzazione al servizio è che la domanda su chi può accedere a quale servizio potrebbe essere una decisione aziendale e in quanto tale potrebbe essere individuata con la logica aziendale. – Jay

+1

In cima alla mia testa, non ho argomenti validi per mettere in sicurezza un controller rispetto a un livello di servizio. Ciò non significa che potrebbero non esistere in casi specifici. I requisiti potrebbero specificare regole basate su dati normalmente disponibili solo nel livello Web, ad esempio, come intestazioni di richiesta. –

9

pensare in termini di riutilizzo del codice. Utilizzerai il tuo servizio altrove? Non solo per alimentare il tuo livello web? Inoltre riutilizziamo i nostri servizi con jms bridge per proteggere il nostro livello di servizio.

+1

questo è un buon punto da tenere in considerazione, grazie. In questo caso particolare, il servizio è destinato esclusivamente all'alimentazione del livello Web. – Jay

0

Credo che il servizio è il posto migliore per utilizzarlo.

Despites some problems che @PreAuthorizecould present sul Controller e la Primavera di sicurezza FAQ recommends per mettere questo tipo di annotazione di servizio, ho capito che l'autorizzazione per una certa azione è più una regola aziendale, allora la responsabilità per il livello Web.

Problemi correlati