package com.litoralregas.vpnprovisioner.config; import com.litoralregas.vpnprovisioner.auth.ApiKeyAuthFilter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; @Configuration @EnableConfigurationProperties({ AppSecurityProperties.class, VpsSshProperties.class }) public class SecurityConfig { private final AppSecurityProperties securityProperties; public SecurityConfig(AppSecurityProperties securityProperties) { this.securityProperties = securityProperties; } @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { ApiKeyAuthFilter apiKeyAuthFilter = new ApiKeyAuthFilter(securityProperties); return http .csrf(csrf -> csrf.disable()) .cors(cors -> cors.disable()) .formLogin(form -> form.disable()) .httpBasic(basic -> basic.disable()) .logout(logout -> logout.disable()) .sessionManagement(session -> session .sessionCreationPolicy(SessionCreationPolicy.STATELESS) ) .authorizeHttpRequests(auth -> auth .requestMatchers("/actuator/health").permitAll() .anyRequest().permitAll() ) .addFilterBefore(apiKeyAuthFilter, UsernamePasswordAuthenticationFilter.class) .build(); } }