2016-04-01 5 views
8

Utilizzo la sicurezza di primavera con REST e sto utilizzando l'URL (/logout) come endpoint per il mio metodo di disconnessione. Ma dopo aver chiamato questo metodo, mi ha reindirizzato a (/login?logout), so che questa è la primavera logOutSuccessUrl. E voglio sbarazzarmi del reindirizzamento. Questo è il mio codice:Spring security - Disabilita il reindirizzamento del logout

protected void configure(HttpSecurity http) throws Exception { 

    http.authorizeRequests() 
     .antMatchers("/login").permitAll() 
     .anyRequest().fullyAuthenticated() 
     .and().requiresChannel().anyRequest().requiresSecure() 
     .and().httpBasic().disable().logout() 
     .disable() 
     // .logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK)) 
      .csrf().disable(); 

} 

ho provato ad usare HttpStatusReturningLogoutSuccessHandler, ma non ha funzionato, e anche l'impostazione logoutSuccessUrl() non cambia nulla.

Sai come disabilitare questo reindirizzamento?

risposta

2

Utilizzare questo metodo:

.logout().logoutSuccessUrl("enter address here where you want to go after logout") 
+1

OP vuole sbarazzarsi del reindirizzamento mentre/logout viene chiamato da un client REST (probabilmente richieste AJAX da un browser) –

+1

Ho già provato questo, ancora ottenuto il reindirizzamento – uncallable

13

Seguendo codice funziona per me (si noti che non ha logout().disable())

http.logout().permitAll(); 
http.logout().logoutSuccessHandler((new HttpStatusReturningLogoutSuccessHandler(HttpStatus.OK))); 
+0

Ho già provato questo, ho ancora il reindirizzamento – uncallable

+1

Prova a impostare il livello di registrazione di sp ring security per eseguire il debug, potrebbe darti un suggerimento. Se si utilizza l'avvio a molla, è possibile aggiungere 'logging.level.org.springframework.security = DEBUG' a application.properties –

+0

@uncallable Hai funzionato? Sto avendo il problema simile. Ho provato tutte le soluzioni, niente funziona. – ddd

0

Foo coloro che fanno uso di configurazione XML, qui è l'equivalente per il frammento di per quello dato da Tahir Akhtar.

All'interno <http> elemento, configurare l'elemento <logout> come segue:

<logout 
    logout-url   = "/some/path/for/logout" 
    invalidate-session = "true" 
    delete-cookies  = "JSESSIONID" 
    success-handler-ref = "httpStatusReturningLogoutSuccessHandler" 
/> 

e definire httpStatusReturningLogoutSuccessHandler fagioli come segue:

<bean 
    id  = "httpStatusReturningLogoutSuccessHandler" 
    class = "org.springframework.security.web.authentication.logout.HttpStatusReturningLogoutSuccessHandler" 
/> 
1

si potrebbe desiderare di provare questo

http.logou t(). logoutRequestMatcher (new AntPathRequestMatcher ("/ thisistomisleadlogoutfilter"));

Questo efficacemente reindirizza/thisistomisleadlogoutfilter per accedere? Logout. Come tale si dovrebbe essere in grado di utilizzare/logout invece

3

Quindi poiché non v'è ancora alcuna risposta accettata, ho posto la mia soluzione, che ha funzionato per me:

.logout() 
.logoutUrl("/api/user/logout") 
.permitAll() 
.logoutSuccessHandler((httpServletRequest, httpServletResponse, authentication) -> { 
    httpServletResponse.setStatus(HttpServletResponse.SC_OK); 
}) 
.and() 

Basta tornare un HTTP_OK pulita (200) dopo in tal caso, la primavera non ti reindirizzerà