Я пытаюсь сделать аутентификацию формы для пользовательского интерфейса и аутентификацию Basi c для REST в Spring Security в моем приложении. Я создал конфигурацию на основе одного из этого вопроса Объединение аутентификации basi c и входа в систему для того же REST Api , но оно не работало должным образом. Проверка подлинности Basi c отменяется проверкой подлинности с помощью формы для службы REST. Что касается комментариев, я вижу, что этот подход не работает, начиная с Spring Security 5. Я хочу знать, почему он сломан сейчас, и можно ли это исправить или использовать какой-то другой подход, чтобы заставить Security работать так, как я ожидаю.
Я использую Spring Boot 2.2.6, и вот моя конфигурация Spring Security
@EnableWebSecurity
public class SecurityConfiguration {
@Bean
public UserDetailsService userDetailsService(UserRepository userRepository) {
return new UserAuthService(userRepository);
}
@Autowired
public void authConfigure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user")
.password("password")
.roles("USER").and()
.withUser("admin")
.password("password")
.roles("USER", "ADMIN");
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.authorizeRequests()
.anyRequest()
.hasAnyRole("ADMIN", "GUEST")
.and()
.httpBasic(Customizer.withDefaults());
}
}
@Configuration
@Order(2)
public static class UiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/resources/*").permitAll()
.antMatchers("/person/**").permitAll()
.antMatchers("/user/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin(Customizer.withDefaults());
}
}
}