Grundlegende Authentifizierung für Spring-Boot-Setup auf einem einzelnen Web-App-Pfad?

Ich versuche, in meiner Spring-Boot-Spring-MVC-basierten Anwendung einen einzelnen Pfad (/ basic) einzurichten, um den grundlegenden Authentifizierungsschutz zu gewährleisten. Ich werde dies nur mit meinen eigenen benutzerdefinierten Konfigurationsparametern konfigurieren, sodass der Benutzername und das Passwort einfach "admin" und "admin" sind.

Dies funktioniert derzeit für den / basic-Pfad (ich werde dazu aufgefordert und kann mich korrekt anmelden). Das Problem ist, dass das Abmelden nicht funktioniert (und ich bin nicht sicher, warum) und auch andere Pfade (wie / andere angezeigt) nach grundlegenden Anmeldeinformationen für die Authentifizierung gefragt werden (bevor sie immer verweigert werden).

static class MyApplicationSecurity extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/open").permitAll();
        http.authorizeRequests().antMatchers("/other").denyAll(); // Block it for now
         http.authorizeRequests().antMatchers("/basic").authenticated().and().httpBasic().and().logout().logoutUrl("/basic/logout").invalidateHttpSession(true).logoutSuccessUrl("/");
    }
}

Ich habe erwartet, dass / other immer abgelehnt wird, aber ich verstehe nicht, warum die Basisauthentifizierung dafür in Frage kommt. / open funktioniert wie erwartet. Ich verstehe auch nicht, warum / basic / logout mich nicht abmeldet (es werden auch keine Fehlermeldungen ausgegeben). Ich habe zwar einen einfachen Code als Platzhalter für den Abmeldeendpunkt, aber wenn ich diesen nicht habe, erhalte ich einen 404. Die "Home" -Ansicht ist mein Webanwendungsstamm, sodass ich den Benutzer nach dem Abmelden nur dorthin senden möchte.

@RequestMapping("/logout")
public ModelAndView logout() {
    // should be handled by spring security
    return new ModelAndView("home");
}

UPDATE: Hier ist die Lösung, die am Ende zu funktionieren schien (mit Ausnahme des Abmeldeteils, der immer noch nicht funktioniert):

@Configuration
@Order(1) // HIGHEST
public static class OAuthSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/oauth").authorizeRequests().anyRequest().denyAll();
    }
}

@Configuration
public static class BasicAuthConfigurationAdapter extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/basic").authorizeRequests().anyRequest().authenticated().and().httpBasic();
        http.logout().permitAll().logoutUrl("/logout").logoutSuccessUrl("/").invalidateHttpSession(true);
        //.and().logout().logoutUrl("/basic/logout").invalidateHttpSession(true).logoutSuccessUrl("/");
    }
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage