package io.gmss.fiscad.configuration; import io.gmss.fiscad.security.JwtAuthenticationEntryPoint; import io.gmss.fiscad.security.JwtAuthenticationFilter; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import java.util.Arrays; import static org.springframework.security.config.http.SessionCreationPolicy.STATELESS; @EnableWebSecurity @Configuration @EnableGlobalMethodSecurity(securedEnabled = true, jsr250Enabled = true, prePostEnabled = true) @RequiredArgsConstructor public class SpringSecurityConfig { private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; private final AuthenticationProvider authenticationProvider; private final JwtAuthenticationFilter jwtAuthenticationFilter; private static final String[] AUTH_WHITELIST = { "/api/**", "/api/auth/login", "/api/open/**", "/api/synchronisation/references", "/v3/api-docs/**", "/swagger-ui/**", "/swagger-ui.html" }; @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .cors(cors -> cors.configurationSource(request -> { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("*")); configuration.setAllowedMethods(Arrays.asList("*")); configuration.setAllowedHeaders(Arrays.asList("*")); return configuration; })) .csrf(AbstractHttpConfigurer::disable) // .csrf(csrf -> { // csrf.ignoringRequestMatchers("/api/**"); // }) .exceptionHandling(ex -> ex.authenticationEntryPoint(jwtAuthenticationEntryPoint)) .authorizeHttpRequests(req -> req //.requestMatchers(HttpMethod.OPTIONS, "/**").permitAll() .requestMatchers(AUTH_WHITELIST).permitAll() .anyRequest() .authenticated() ) .authenticationProvider(authenticationProvider) .sessionManagement(session -> session.sessionCreationPolicy(STATELESS)) .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class) ; return http.build(); } }