Spring-Boot Настройка базовой аутентификации на один путь веб-приложения?
Я пытаюсь настроить единственный путь (/ basic) в моем приложении на основе MVC с пружинной загрузкой, чтобы он был защищен от базовой аутентификации. Я просто собираюсь настроить это, используя мои собственные параметры конфигурации, чтобы имя пользователя и пароль были просто «admin» и «admin».
В настоящее время это работает для пути / basic (мне предлагают и я могу войти правильно). Проблема в том, что выход из системы не работает (и я не уверен, почему), а также другие пути (как показано / другие показаны) запрашивают базовые учетные данные аутентификации (прежде чем всегда будет отказано).
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("/");
}
}
Я ожидал, что / other всегда будет отказано, но я не понимаю, почему для этого подходит базовая аутентификация. / открыть работает, как и ожидалось. Я также не понимаю, почему / basic / logout не выводит меня из системы (также не выдает сообщений об ошибках). У меня есть небольшой кусочек кода в качестве заполнителя для конечной точки выхода из системы, но если у меня его нет, я получаю 404. «Домашний» вид - это мой корень веб-приложения, поэтому я просто хочу отправить пользователя туда после выхода из системы.
@RequestMapping("/logout")
public ModelAndView logout() {
// should be handled by spring security
return new ModelAndView("home");
}
ОБНОВЛЕНИЕ: Вот решение, которое, казалось, сработало в конце (кроме части выхода из системы, все еще не работающей):
@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("/");
}
}