- Quali sono i vantaggi per ottenere principale come parametro
Principal principal
controller primavera e poi passarlo al livello di servizio nel corso ricevendo principale nel livello di servizio immediatamente seSecurityContextHolder.getContext().getAuthentication().getPrincipal()
? - Qual è l'approccio migliore per ottenere i dettagli principali nel livello di servizio senza controllare gli oggetti
getAuthentication()
egetPrincipal()
per null ovunque (qualcosa come un wrapper personalizzato)?
risposta
-
- tuo API del servizio sarà più facile da usare. Vedrai direttamente la dipendenza dall'entità, quindi non invocherai alcuni metodi di servizio per errore in un ambiente in cui il principal non esiste.
- In generale meno dipendenze sul codice SpringSecurity significa meno problemi in caso di migrazione alla nuova versione di Spring Security.
- Sarà possibile riutilizzare il livello di servizio in un ambiente in cui Spring Security non esiste.
- Preparare una classe wrapper (ad esempio AuthenticationService). Aggiungi il metodo getPrincipal() ad esso. Implementa i tuoi assegni. Inject AuthenticationService ovunque insted di chiamate dirette a SecurityContextHolder.
Se ho bisogno di ottenere alcuni dati per un utente specifico, penso che ottenere un principal (nome utente per esempio) nel livello di servizio sia più sicuro perché ci sono meno livelli tra questa (restrizione) e il database. Quindi è il solo dao rimasto invece di ottenere il principal nel controller (livello di servizio aggiuntivo tra). Ma d'altra parte, come hai detto, il livello di servizio può essere più riutilizzabile. Cosa ne pensi di questo? – Alex
Un oggetto principale è trattenuto e mantenuto dal livello Web. Quindi per me sembra naturale che un principio provenisse dal contoller al livello di servizio. Un altro punto è che le dipendenze statiche sono dannose per i test unitari: http://misko.hevery.com/2008/12/15/static-methods-are-death-to-estibility/. Non vedo alcun problema di sicurezza perché un'istanza principale è immutabile (e in questo momento la password verrà modificata in base all'effettiva implementazione). Scusa il ritardo. Ero AFK da molto tempo. –
È sicuro utilizzare l'opzione 2 nel BaseService esteso (nel livello di servizio)? – Alex
- 1. Contesto thread sicurezza Spring Security
- 2. Devo duplicare la convalida nel mio livello MVC e nel livello di servizio?
- 3. Come avere un contesto di sicurezza primaverile nel contesto figlio
- 4. Metodi grezzi nel livello di servizio utilizzando Spring Data JPA
- 5. quale contesto usare nel servizio?
- 6. non valido o scaduto token di contesto di sicurezza nel servizio Web WCF
- 7. Autenticazione token di sicurezza Spring - Servizio JSON RESTful
- 8. Impossibile ottenere l'utente dal contesto di sicurezza nell'ambiente di prova
- 9. Devo fare il caching sul livello DAO o sul livello di servizio nell'app web Spring MVC?
- 10. Spring MVC: il livello di servizio deve restituire DTO specifici di operazioni?
- 11. Impossibile creare ThreadPoolExecutor dal contesto dell'applicazione Spring
- 12. Quale convenzione di denominazione utilizzate per il livello di servizio in un'applicazione Spring MVC?
- 13. ASP.NET MVC 5 Managment di contesto asincrono
- 14. Spring security oauth2 - acquisizione di dati personalizzati dal principale OAuth2
- 15. spring rest servizio mvc reindirizzamento/inoltro/proxy
- 16. MVC - Comunicazione livello controller a servizio
- 17. Ottieni oggetto utente principale nei metodi di servizio
- 18. È LocaleContextHolder sicuro nel livello di servizio
- 19. Utilizzo di Spring Validator al di fuori del contesto di Spring MVC
- 20. Come progettare un servizio REST Spring MVC?
- 21. Motivo di progettazione MVC, scopo del livello di servizio?
- 22. Come impostare il contesto dell'applicazione Web nel test MVC di primavera
- 23. AngularJS + Spring MVC con sicurezza - da dove cominciare?
- 24. Capire classe DeferredResult del Spring MVC nel contesto dell'applicazione primavera-MVC-Chat github
- 25. Implementazione di un livello di servizio in un'architettura MVC
- 26. servizio di test di livello nella MVC primavera utilizzando EasyMock
- 27. Spring Security: più contesto di sicurezza ma restituisce autenticazione errata-failure-url
- 28. spring logout di sicurezza provoca NullPointerException
- 29. accesso contesto Spring nel pacchetto OSGi
- 30. Le annotazioni a livello del metodo di sicurezza a molla devono essere applicate al livello controller o al livello servizio?
È possibile trovare le risposte a [questa domanda] (http://stackoverflow.com/questions/248562/when-using-spring-security-what-is-the-proper-way-to-obtain- current-username-i) utile. [Questa risposta] (http://stackoverflow.com/questions/8764545/best-practice-for-getting-active-users-userdetails/8765597#8765597) potrebbe essere utile anche. –
È una buona soluzione avere una classe astratta con metodo statico dove posso mettere 'SecurityContextHolder.getContext(). GetAuthentication(). GetPrincipal()'? Dopo di che posso usarlo nel livello di servizio. – Alex
Leggi il secondo link che ti ho dato di nuovo. Non c'è niente che ti impedisca di utilizzare questo approccio nei tuoi servizi e se utilizzi un'interfaccia puoi anche sostituirla per i test. –