2015-04-12 13 views
8

Sono in grado di utilizzare una pagina di accesso personalizzato con Primavera di sicurezza 3.2.4, ma dopo la migrazione con il codice qui sotto usando 4.0.0, vedo un form di login generica al posto di mia abitudine uno:Perché la mia pagina di accesso personalizzata non viene visualizzata con Spring Security 4?

<beans:bean id="authSuccessHandler" class="com.company.web.RoleBasedAuthenticationSuccessHandler" /> 

    <http disable-url-rewriting="false" use-expressions="true"> 
    <form-login login-page="/login" 
     username-parameter="j_username" 
     password-parameter="j_password" 
     login-processing-url="/j_spring_security_check" 
     authentication-failure-url="/login?login_error=true" 
     authentication-success-handler-ref="authSuccessHandler"/> 
    <!-- SOME INTERCEPT-URLs (redacted) --> 
    <intercept-url pattern="/login" access="permitAll"/> 
    <remember-me 
     remember-me-parameter="_spring_security_remember_me" 
     remember-me-cookie="SPRING_SECURITY_REMEMBER_ME_COOKIE"/> 
    <logout 
     logout-url="/j_spring_security_logout" 
     logout-success-url="/index" /> 
    </http> 

I ha anche provato a abilitare la registrazione di debug sulle varie classi Spring. L'ho impostato sul mio authSuccessHandler personalizzato, ma non vedo alcun output da esso. Nessuna fortuna con la ricerca su SO o Google.

C'è qualcosa di incompatibile con questa configurazione?

Aggiornamento:

Inoltre sto usando Apache Tiles come così:

<definition name="login" extends="scrollableLayout"> 
    <put-attribute name="header" value="/WEB-INF/jsp/heading_blue.jsp"/> 
    <put-attribute name="body" value="/WEB-INF/jsp/login.jsp"/> 
    </definition> 

E utilizzando il seguente:

3.x
<mvc:view-controller path="/login" /> 

risposta

6

Primavera di sicurezza utilizzato spring_security_login come URL di accesso predefinito (source: official documentation). Questo può essere impostato su un valore personalizzato come <security:form-login login-page="/login"> e associato a un controller per il rendering di una pagina personalizzata.

Primavera di sicurezza 4.x ha abbandonato spring_security_login e passati a login come URL di accesso predefinito (source: official Spring Security 4.x migration guide). Pertanto, l'URL login ora passa all'infrastruttura predefinita Spring Security, che visualizza la pagina di accesso predefinita generata automaticamente.

Il rimedio è semplice se si utilizza JSP come tecnologia di rendering della vista. È sufficiente rinominare la pagina di accesso su login.jsp, rilasciarla nella cartella principale della gerarchia di pagina e Spring Security la preleva automaticamente. Se non si utilizza JSP, si dovrà utilizzare un valore diverso login-page (forse signin invece di login e quindi modificare la mappatura del controller pure.

Nota che l'URL di default di logout è cambiato anche in 4.x. Se avete qualsiasi logica personalizzata scritta per l'URL di disconnessione, facciamo in modo di rivedere quello pure.

do rivedere la guida ufficiale di migrazione come un sacco di cose sono cambiate in 4.x.

+0

vorrebbe dire che ho dovrei rimuovere login-page = "/ login"? Ho provato a rimuoverlo, ma senza fortuna. Sto usando Tiles se questo fa differenza. Il mio JSP è chiamato login.jsp. – bphilipnyc

+0

Hai un metodo del controller mappato a '/ login' che a sua volta rende' login.jsp'? – manish

+0

Sì, aggiunge solo alcune variabili al modello e restituisce "login". – bphilipnyc

Problemi correlati