I have a java application build on spring boot 3 and I have a simple security configuration like this:
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
private static final String[] permitMethods = new String[]{
"/api/games/**",
"/swagger-ui/**",
"/v3/api-docs/**",
"/actuator/**"
};
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.csrf(csrf -> csrf.disable())
.authorizeRequests(authorizeRequests ->
authorizeRequests
.requestMatchers(permitMethods).permitAll()
.anyRequest().authenticated()
)
.userDetailsService(userDetailsService())
.httpBasic(Customizer.withDefaults());
return http.build();
}
@Bean
public UserDetailsService userDetailsService() {
UserDetails user = User.withDefaultPasswordEncoder()
.username("admin")
.password("admin")
.build();
return new CachingUserDetailsService(new InMemoryUserDetailsManager(user));
}
}
The problem is that current application uses too much CPU over 70% while executing stress test.
When I am removing
.httpBasic(Customizer.withDefaults());
CPU usage goes down to 10%. I am executing stress test just with 40 parallel threads, the more parallel threads I set the more CPU usage becomes.
I am currently using spring boot 3.1.1 version
but I have tried it on spring boot 3.0.0
version as well, but the result was same.
Do you have any ideas how can I minimize CPU usage with the basic authentication ?