У меня возникла проблема с порядком фильтрации при использовании настраиваемой автоматически настраиваемой конфигурации веб-безопасности из другого проекта вместе с Spring Cloud Eureka Server. При использовании настраиваемой автоматически настраиваемой конфигурации веб-безопасности springSecurityFilterChain
появляется после фильтра servletContainer
, созданного EurekaServerConfiguration
. Следовательно, доступ к панели управления Eureka защищен, но /eureka/*
не применена цепочка фильтров Spring Security.
Если я использую автоматически настраиваемую веб-безопасность Spring Boot по умолчанию (т.е. свойства security.basic.*
, порядок фильтров правильный.
Если я использую создание настраиваемой конфигурации веб-безопасности в том же проекте и другом классе конфигурации в качестве сервера обнаружения, порядок фильтров правильный. Если я аннотирую основной класс приложения с помощью @EnableWebSecurity
или добавляю статический внутренний класс в основной класс приложения с помощью @EnableWebSecurity
, я также получаю неправильный порядок фильтрации.
Что я неправильно предоставляю автоконфигурацию или что-то не хватает в деталях реализации конфигурации веб-безопасности?
Репозиторий с полными примерами: Примеры конфигурации Eureka Security
Настройка
модуль - моя автоконфигурация
@Configuration
@AutoConfigureBefore(SecurityAutoConfiguration.class)
@ConditionalOnClass(EnableWebSecurity.class)
public class CustomSecurityConfiguration {
@Configuration
@EnableWebSecurity
public static class WebSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
}
Этот проект содержит папку META-INF с файлом spring.factories
и соответствующим классом, добавленным под ключом EnableAutoConfiguration
. Я подтвердил через -Ddebug
, что класс является положительным совпадением.
модуль - сервер обнаружения
Я включаю указанный выше модуль как зависимость, а также spring-boot-starter-security
.
@SpringBootApplication
@EnableEurekaServer
public class DiscoveryServerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
Порядок фильтрации - Ожидаемый (при использовании базовой безопасности Spring Boot или настраиваемой безопасности в проекте сервера обнаружения)
Mapping filter: 'metricFilter' to: [/*]
Mapping filter: 'characterEncodingFilter' to: [/*]
Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
Mapping filter: 'springSecurityFilterChain' to: [/*]
Mapping filter: 'webRequestTraceFilter' to: [/*]
Mapping filter: 'servletContainer' to urls: [/eureka/*]
Mapping filter: 'applicationContextIdFilter' to: [/*]
Mapping servlet: 'dispatcherServlet' to [/]
Порядок фильтров - Результат (настраиваемая автоматически настраиваемая веб-безопасность)
Mapping filter: 'metricFilter' to: [/*]
Mapping filter: 'characterEncodingFilter' to: [/*]
Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
Mapping filter: 'webRequestTraceFilter' to: [/*]
Mapping filter: 'servletContainer' to urls: [/eureka/*]
Mapping filter: 'springSecurityFilterChain' to: [/*]
Mapping filter: 'applicationContextIdFilter' to: [/*]
Mapping servlet: 'dispatcherServlet' to [/]