2016-06-16 10 views
0

Ich benutze Spring-Boot (1.3.5) + oauth2 (Feder-Cloud-Starter-oauth2). Ich möchte einige LogoutSuccessHandler testen, aber ich kann es nicht aufrufen.Spring LogoutSuccessHandler nicht aufgerufen

Dies ist meine Sicherheitskonfiguration:

@Configuration 
@EnableWebSecurity 
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER) 
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter { 

    @Autowired 
    private LogoutHandler logoutHandler; 

    @Override 
    public void configure(HttpSecurity http) throws Exception { 
     http 
       .anonymous().disable() 
       .httpBasic().disable() 
       .authorizeRequests() 
       .antMatchers("/index.html", "/", "/resources/**", "/css/**").permitAll() 
       .anyRequest().authenticated(); 

     http.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessHandler(logoutHandler); 
     //.invalidateHttpSession(true).deleteCookies("JSESSIONID", "SESSION"); 
    } 
} 

Das ist mein logoutHandler

@Component 
public class LogoutHandler extends AbstractAuthenticationTargetUrlRequestHandler implements LogoutSuccessHandler { 

    @Override 
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { 
     setDefaultTargetUrl("/"); 
     super.handle(request, response, authentication); 
    } 
} 

Wenn ich die Anwendung debuggen und setzen Sie den Haltepunkt auf die logoutHandler wird es nie aufgerufen. Fehle ich etwas in dieser Konfiguration?

Dank

Antwort

0

Aktualisieren Sie Ihre configure Methode ein wenig. Sie müssen AntPathRequestMatcher nicht verwenden, um die Abmelde-URL abzugleichen.

@Override 
    public void configure(HttpSecurity http) throws Exception { 
     http 
      .anonymous().disable() 
      .httpBasic().disable() 
      .authorizeRequests() 
      .antMatchers("/index.html", "/", "/resources/**", "/css/**").permitAll() 
      .anyRequest().authenticated() 
      .and() 
      .logout() 
      .logoutUrl("/logout") 
      .logoutSuccessHandler(logoutHandler) 
      //.deleteCookies("JSESSIONID", "JSESSIONID") 
      //.invalidateHttpSession(true) 
      .permitAll(); 
    } 
+0

Auch wenn ich Ihren Vorschlag versuchen, es funktioniert nicht :(Seltsame ist, dass, wenn ich Post an localhost senden: 8080/ui/logout Ich erhalte Fehler GET http: // localhost: 8080/Anmelden/Abmelden 404 (Nicht gefunden) – bilak

+0

Warum brauchen Sie die @ Ordnung? Können Sie es entfernen und versuchen? –

Verwandte Themen