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 одновременных потоков.

Надеюсь это поможет. Спасибо.

Другие вопросы по тегам