Исключить пользовательские URL из сопоставителей муравьев в Spring Security
После обновления некоторых API до версии 2 мне нужно настроить пользовательский фильтр при сбоях аутентификации, чтобы дать пользователю заново отформатированные сообщения об ошибках. Я столкнулся с проблемой, поскольку URL-адреса версии 2 также следуют тому же шаблону URL, для которого был настроен существующий фильтр.
Ранее я добавил следующую конфигурацию для аутентификации шаблонов защищенных URL.
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(this.authenticationEntryPoint)
.and()
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/*/login").permitAll()
.antMatchers(HttpMethod.OPTIONS).permitAll()
.antMatchers("/auth/refresh-token").permitAll()
.antMatchers("/auth/external/login").permitAll()
.and()
.authorizeRequests()
.antMatchers("/api/**").authenticated()// Protected API End-points
.and()
.addFilterBefore(buildLoginProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(buildProgrmmaticAuthProcessingFilter(), UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(buildJwtTokenAuthenticationProcessingFilter(), UsernamePasswordAuthenticationFilter.class);
}
Как видите, URL начинаются с /api/**
настроены для аутентификации и фильтрации с использованием добавленных фильтров.
Теперь проблема в том, что URL версии 2 также начинаются с /api
, Но мне нужно настроить другой фильтр, как показано ниже.
http
.exceptionHandling().authenticationEntryPoint(this.authenticationEntryPoint)
.and().authorizeRequests()
.antMatchers("/api/something/v2/**").authenticated().and().
addFilterBefore(buildJwtAuthProcessingFilterForVersionTwo(), UsernamePasswordAuthenticationFilter.class);
Поскольку URL начинаются с api/
уже были обнаружены первой конфигурацией, новая конфигурация не учитывается.
Есть ли способ, которым я могу добавить шаблон URL в первую конфигурацию, которая принимает URL-адреса, начинающиеся с /api
в рассмотрение, но исключает URL-адреса, такие как /api/**/v2/**
?