package ru.soune.nocopy.configuration.security; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; 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.config.http.SessionCreationPolicy; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import ru.soune.nocopy.util.ApiKeyFilter; import ru.soune.nocopy.util.JwtAuthFilter; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final JwtAuthFilter jwtAuthFilter; private final ApiKeyFilter apiKeyFilter; @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(AbstractHttpConfigurer::disable) .sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth -> auth .requestMatchers("/api/v{version}/files/public-download/**").permitAll() .requestMatchers("/api/files/public/**").permitAll() .requestMatchers("/api/auth/**").permitAll() .requestMatchers("/api/file/link/**").permitAll() .requestMatchers("/check/api/**").permitAll() .requestMatchers("/api/internal/**").permitAll() .anyRequest().authenticated() ) .addFilterBefore(apiKeyFilter, UsernamePasswordAuthenticationFilter.class) .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } }