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

È stato utile?

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:

http: // statico. springframework.org/spring-security/site/reference/html/ns-config.html#filter-stack

Come parte della configurazione del filtro standard viene caricato il filtro SecurityContextHolderAwareRequestFilter .

Esame del filtro @ https://fisheye.springsource.org/browse/spring-security/tags/spring-security-parent-2.0.4/core/ src / main / java / org / Spring Framework / sicurezza / involucro / SecurityContextHolderAwareRequestFilter.java? r = 2.514

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top