Spring безопасность и пользовательский AuthenticationFilter с загрузкой Spring

У меня есть собственный фильтр проверки подлинности, который создает PreAuthenticatedAuthenticationToken и сохраняет его в контексте безопасности. Все это прекрасно работает. Вот конфиг:

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private SsoAuthenticationProvider authenticationProvider;

    @Autowired
    private SsoAuthenticationFilter ssoAuthenticationFilter;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterAfter(ssoAuthenticationFilter, SecurityContextPersistenceFilter.class);
    }
}

Теперь мой ssoAuthenticationFilter является частью FilterChainProxy в правой позиции. Гладкая.

Но поскольку ssoAuthenticationFilter - Filter, он получает Boot и включается в качестве фильтра. Поэтому моя цепочка фильтров выглядит так:

  • ssoAuthenticationFilter (включен, потому что он Filter)
  • filterChainProxy (spring автоконфигурация)
    • ...
    • SecurityContextPersistenceFilter
    • ssoAuthenticationFilter (включено http.addFilterAfter(...))
    • ...
  • некоторые другие фильтры

Очевидно, я хотел бы избавиться от авторегистрации ssoAuthenticationFilter здесь (первый из них указан).

Любые советы очень ценятся.

Ответ 1

2 варианта:

  • Добавьте FilterRegistrationBean @Bean с вашим фильтром bean в качестве целевого фильтра и отметьте его как enabled = false

  • Не создавайте определение @Bean для вашего фильтра (обычно это то, что я делаю, но YMMV, так как вы можете зависеть от автоподключения или что-то, чтобы заставить его работать)