2016-04-01 14 views
8

Ich verwende Spring-Sicherheit mit REST, und ich verwende die URL (/logout) als Endpunkt für meine Abmelde-Methode. Aber nachdem ich diese Methode aufgerufen habe, leite ich sie um (/login?logout), ich weiß, das ist der Frühling logOutSuccessUrl. Und ich möchte die Umleitung loswerden. Dies ist mein Code:Spring security - Deaktivieren Sie die Abmeldung redirect

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(); 

} 

Ich versuchte HttpStatusReturningLogoutSuccessHandler zu verwenden, aber es hat nicht funktioniert, und sogar logoutSuccessUrl() Einstellung ändert nichts.

Wissen Sie, wie kann ich diese Umleitung deaktivieren?

Antwort

2

Verwenden Sie diese Methode:

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

OP möchte die Umleitung loswerden, da die/Abmeldung von einem REST-Client aufgerufen wird (wahrscheinlich AJAX-Anfragen von einem Browser) –

+1

Ich habe das schon ausprobiert, noch bekommen die Umleitung – uncallable

13

Code Nach funktioniert für mich (man beachten, dass es nicht logout().disable() hat)

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

Ich habe das bereits versucht, bekam immer noch die Umleitung – uncallable

+1

Versuchen Sie, Logging-Level von sp Ring-Sicherheit zu debuggen, könnte es Ihnen einen Hinweis geben. Wenn Sie Spring Boot verwenden, können Sie 'logging.level.org.springframework.security = DEBUG' zu application.properties hinzufügen. –

+0

@uncallable Haben Sie es zum Laufen gebracht? Ich habe das ähnliche Problem. Versuchte alle Lösungen, nichts funktioniert. – ddd

0

Foo diejenigen, den XML-Konfigurations verwenden, hier das äquivalent für Snippet für die eine gegeben durch Tahir Akhtar.

Innerhalb <http> Element, konfigurieren Sie das <logout> Element wie folgt:

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

Und httpStatusReturningLogoutSuccessHandler Bohne wie folgt definieren:

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

Sie können diese

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

Dies leitet effektiv/Thistomisleadlogoutfilter zum Login? Logout. Als solche sollten Sie in der Lage sein/Logout zu verwenden, anstatt

3

So, da es noch keine akzeptierte Antwort ist, schreibe ich meine Lösung, die für mich gearbeitet:

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

Nur eine saubere HTTP_OK zurückkehren (200) nach Erfolgreiches Abmelden - der Frühling wird Sie in diesem Fall nicht umleiten

Verwandte Themen