Spring BasicAuthenticationFilter.doFilter() very slow



在我的Spring Boot 2.0.5应用程序中,我使用基本身份验证来保护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会为Spring的BasicAuthenticationFilter.doFilter((使用的每个Web服务请求报告长达10秒的时间(!(。

这是一笔巨大的开销。这里出了什么问题,我能做些什么来加快速度?

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

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

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

此外,如果您正在使用HikariCP,请点击此链接微调最大池大小。

目前,我的TPS是300+,用于2核CUP,用于300个同时线程

希望这能有所帮助。非常感谢。

最新更新