Acegi / Spring supporta la sicurezza getUserPrincipal ()?
-
10-07-2019 - |
Domanda
Devo interfacciare un'applicazione esistente con la sicurezza Acegi / Spring.
Per iniziare, sto cercando una semplice informazione: in questo contesto, HttpServletRequest.getUserPrincipal () chiamato dalla mia applicazione restituirà correttamente il nome utente ottenuto attraverso Spring (invece di usare oggetti specifici di Spring)? Ho cercato su Google informazioni contrastanti su questo.
Suppongo che se Acegi è implementato con filtri, è in grado di sovraccaricare getUserPrincipal () dell'API Servlet, giusto?
Domanda sussidiaria: se questo non è il caso per impostazione predefinita, c'è un modo per accenderlo?
Grazie,
-Erik
Soluzione
Come ha risposto l'utente precedente, la sicurezza di primavera supporta getUserPrincipal e isUserInRole. Ecco come funziona la sicurezza primaverile.
Quando si configura spring, può caricare i seguenti filtri:
Come parte della configurazione del filtro standard viene caricato il filtro SecurityContextHolderAwareRequestFilter
.
Puoi vederlo che avvolge e modifica l'oggetto HttpServletRequest
nella classe SecurityContextHolderAwareRequestWrapper
che estende HttpServletRequestWrapper
che implementa HttpServletRequest
e rispedirlo alla catena doFilter del filtro servlet standard. Poiché il filtro di sicurezza di primavera dovrebbe essere configurato come primo filtro, tutte le classi successive vedranno invece il SecurityContextHolderAwareRequestWrapper
. Questo include pagine JSP o Servlet dietro questo filtro.
Quando si effettua una chiamata a isUserInRole
o getUserPrincipal
dalla pagina JSP, Servlet o qualsiasi framework dietro questo filtro, si chiama HttpServletRequest
implementazione da Spring Security.
Altri suggerimenti
Se si utilizza il filtro di sicurezza, sì. Credo che questo sia il comportamento predefinito.
Esattamente quale classe stai recuperando dipende dalla tua configurazione, ma tutti implementano l'interfaccia principale tramite la propria org.springframework.security di Spring. Interfaccia di autenticazione che la estende.
Ho usato request.getUserPrincipal () e request.isUserInRole () in un'applicazione Spring e funziona senza problemi, anche all'interno di JSP.
Credo che Spring Security memorizzi queste informazioni in SecurityContext e non nella richiesta. Puoi facilmente scrivere un FilterSecurityInterceptor che può essere configurato per aggiungere anche queste informazioni alla richiesta.