Я установил мультимодульное приложение Spring Boot (5 модулей) с Spring Security OAuth2.Все работает хорошо, но по мере роста приложения я хочу разделить часть безопасности в каждом модуле.Основной модуль включает все:
@SpringBootApplication
@EnableResourceServer
@EnableAuthorizationServer
@EnableWebSecurity(debug = true)
public class Application {
...
}
Теперь в каждом модуле я определил бин типа ResourceServerConfigurer
@Configuration
@Order(2)
public class Module1SecurityFilterChain extends ResourceServerConfigurerAdapter {
@Override
public void configure( HttpSecurity http ) throws Exception {
http.sessionManagement().sessionCreationPolicy( STATELESS );
http.antMatcher( "/module1/**")
.authorizeRequests()
.antMatchers( "/module1/resource").authenticated()
.antMatchers( "/module1/test" ).authenticated()
.anyRequest().access( "#oauth2.hasScope('webclient')" );
}
}
То же самое с модулем 2:
@Configuration
@Order(1)
public class Module2SecurityFilterChain extends ResourceServerConfigurerAdapter {
@Override
public void configure( HttpSecurity http ) throws Exception {
http.sessionManagement().sessionCreationPolicy( STATELESS );
http.antMatcher( "/module2/**")
.authorizeRequests()
.antMatchers( "/module2/resource").authenticated()
.antMatchers( "/module2/test" ).authenticated()
.anyRequest().access( "#oauth2.hasScope('webclient')" );
}
}
И так далее ...
Проблема в том, что зарегистрирована только одна FilterChain, из которых @Order(2)
.Я взглянул на doc из ResourceServerConfigurer
и там говорится:
... если более одного настраивают одну и ту же преоперту, тогда выигрывает последняя.Конфигураторы отсортированы по Порядку перед применением
Как я могу обойти это ограничение?Большое спасибо.
РЕДАКТИРОВАТЬ
Выполнение этого (расширение WebSecurityConfigurerAdapter
вместо ResourceServerConfigurerAdapter
):
@Configuration
@Order(1)
public class Module2SecurityFilterChain extends WebSecurityConfigurerAdapter {...}
, кажется, регистрируетцепочка фильтров, но есть другая проблема: когда я аутентифицирую пользователя (получаю токен на /oauth/token
), я не могу получить доступ к ресурсу, защищенному этой цепочкой, я получаю 403 Forbidden
.Как работает этот черный ящик?