2012-03-12 1 views
11

Ho implementato la sicurezza di primavera nella mia applicazione, il mio spring-security.xml ha il seguente tag di login.La sicurezza di primavera non ha colpito l'url di destinazione dopo l'autenticazione corretta

<form-login login-page="/login.htm" default-target-url="/dashboard.htm" 
      authentication-failure-url="/login.htm?error=true" 
      authentication-success-handler-ref="authenticationSuccessHandler" /> 

voglio effettuare il login da /login.htm e dopo authetication successo voglio all'utente di colpire dashboard.htm. Everythig sta funzionando bene, tranne per il fatto che dopo il successo dell'autorizzazione non colpisce /dashboard.htm ma colpisce il contesto..ma se scrivo manualmente dashboard.htm in url allora tutto funziona bene ... Sì..Io ho implementazione di authticationSuccessHandler.

+0

tentando di attivare il debug leve per la sicurezza primavera e vedere cosa sta succedendo uno. Stai usando altri filtri? Come urlrewrite? – jddsantaella

+1

Non sono esperto in Spring Security, ma perché hai sia un URL di destinazione predefinito che un gestore di successo per l'autenticazione? Puoi rimuovere default-target-url e fare il reindirizzamento nel gestore di successo – Blitzkr1eg

+3

Blitzkr1eg ha ragione, non dovresti avere sia authentication-success-handler-ref che default-target-url. Dalla descrizione di authentication-success-handler-ref: "Riferimento a un bean AuthenticationSuccessHandler che dovrebbe essere utilizzato per gestire una richiesta di autenticazione riuscita. ** Non deve essere utilizzato in combinazione con default-target-url (o sempre-use-default -target-url) poiché l'implementazione deve sempre occuparsi della navigazione verso la destinazione successiva ** " – Dani

risposta

14

provare a rimuovere l'attributo default-target-url e aggiungere la seguente:

<b:bean id="authenticationSuccessHandler" class="com.example.CustomSimpleURLAuthenticationSuccessHandler"> 
    <b:property name="defaultTargetUrl" value="/dashboard.htm"/> 
</b:bean> 
+0

Grazie Vasileios ... questo ha funzionato per me .. – Ashish

+0

@vasilakis che reindirizza sempre all'URL di destinazione come predefinito o no? –

8
<beans:bean id="loginSuccessHandler" class="com.example.LoginSuccessHandler"> 
    <beans:property name="defaultTargetUrl" value="/security/success"/> 
    <beans:property name="alwaysUseDefaultTargetUrl" value="true"/> 
</beans:bean> 

public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler { 

    @Override 
    public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, 
            Authentication authentication) throws ServletException, IOException { 
     request.getSession().setMaxInactiveInterval(60 * 60); //one hour 
     System.out.println("Session set up for 60min"); 
     super.onAuthenticationSuccess(request, response, authentication); 
     } 
} 
+1

Grazie! Questo ha funzionato per me :) –

+0

Una grande risposta! – Omid

+0

Per chiunque usi la configurazione puramente Java, è possibile impostare le proprietà nel pubblico del gestore LoginSuccessHandler() {super(); setAlwaysUseDefaultTargetUrl (true); setDefaultTargetUrl ("/ security/success"); } – ryanp102694

6

Io uso questo suggerimento dalla questione spring is not redirecting to default target url?. Ho provato questo e sta funzionando.

<form-login login-page="/login.htm" 
default-target-url="/dashboard.htm" 
always-use-default-target="true"/> 
0

Come si può vedere nell'immagine, c'è una sorta di cattiva progettazione (IMO E 'sempre reindirizzare al default-target-url). Quando vai al form di login da una risorsa proibita, esso favore usare tale URL e non passando attraverso the default-target-url

http://i.stack.imgur.com/fj9ou.png