Spring BasicAuthenticationFilter.doFilter() очень медленный
В моем приложении Spring Boot 2.0.5 я использую basic-auth для защиты REST-API.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(final HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/api/**").authenticated().and()
.httpBasic().and().csrf().disable();
}
@Bean
public InMemoryUserDetailsManager inMemoryUserDetailsManager() {
final InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
manager.createUser("user").password("pwd").roles("roles").build()));
return manager;
}
}
Один из этих API используется клиентом Feign (другое приложение Spring Boot) с Feigns BasicAuthRequestInterceptor.
NewRelic сообщает о каждом запросе веб-сервиса, который SpringAuthenticationFilter.doFilter() использует до 10 секунд (!).
Это огромные накладные расходы. Что здесь не так и что я могу сделать, чтобы ускорить процесс?
0 ответов
Я тоже столкнулся с той же проблемой. Мой TPS был 40 для 150 одновременных потоков. Мы проанализировали проблему и обнаружили, что проблема связана с алгоритмом кодирования Bcrypt. Измените силу на более низкое значение. Как показано ниже.
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(4);
}
По умолчанию надежность BCryptPasswordEncoder равна 10. Уменьшите ее до 4. Также обновите пароли в хранилище паролей.
Кроме того, если вы используете HikariCP, перейдите по этой ссылке, чтобы настроить максимальный размер пула.
В настоящее время мой TPS составляет 300+ для 2-ядерной CUP для 300 одновременных потоков.
Надеюсь это поможет. Спасибо.