Spring BasicAuthenticationFilter.doFilter()非常慢

时间:2018-11-29 15:14:15

标签: spring basic-authentication feign

在我的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;
    }
}

带有Feigns BasicAuthRequestInterceptor的Feign客户端(另一个Spring Boot应用程序)使用这些API之一。

NewRelic针对Spring的BasicAuthenticationFilter.doFilter()最多使用10秒(!)使用的每个Web服务请求进行报告。

那是巨大的开销。这里有什么问题,我该怎么办才能加快速度?

1 个答案:

答案 0 :(得分:0)

我也面临着同样的问题。我的TPS是150个同时线程的40。我们分析了该问题,发现该问题与Bcrypt编码算法有关。将强度更改为较低的值。像下面。

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder(4);
}

BCryptPasswordEncoder的默认强度为10。将其减小为4。同时更新密码存储区中的密码。

此外,如果您使用的是HikariCP,请遵循此link来微调最大池大小。

当前,我的TPS是300+,用于2个核心CUP,同时运行300个线程

希望这会有所帮助。谢谢。