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, так как вы можете зависеть от автоподключения или что-то, чтобы заставить его работать)