Вы, кажется, близко. Помните, что когда вы определяете WebSecurityConfigurerAdapter
, вам нужно указать, какие типы механизмов аутентификации вы хотите использовать:
@Configuration
@Slf4j
@Order(99)
public class RestSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.requestMatchers()
.antMatchers("/api/**")
.and()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic(); // <-- use HTTP basic
}
}
Также обратите внимание на небольшую разницу между requestMatchers
и authorizeRequests
. Если у вас есть разные WebSecurityConfigurerAdapter
s, они сегментируются по пути с использованием requestMatchers
.
. Значение приведенного выше фрагмента кода «для запросов, которые соответствуют / api / **, аутентифицируют любой запрос с использованием HTTP-основы» 1025 *. "
Для веб-безопасности мы хотим обрабатывать« все остальное », поэтому нам не нужен requestMatchers()
. Итак, чтобы сделать то же самое для вашей веб-безопасности, вы должны сделать:
@Configuration
@Slf4j
@Order(100)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/action/**", "/login", "/css/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.and()
// ...
;
}
}
Смысл приведенного выше фрагмента кода - «аутентифицировать любой запрос с помощью входа в систему».
Наконец, Spring Безопасность будет обрабатывать WebSecurityConfigurerAdapter
с по возрастанию @Order
. Итак, обратите внимание, что первый - «99», а второй - «100». Это означает, что RestSecurityConfig
будет обработан до WebSecurityConfig
. Вы можете думать об этом как о выражении if:
if (request matches /api) {
check the `RestSecurityConfig` configuration
} else {
check the `WebSecurityConfig` configuration
}