package com.ddf.vodsystem.configuration; import com.ddf.vodsystem.security.CustomOAuth2UserService; import org.springframework.beans.factory.annotation.Value; 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.web.SecurityFilterChain; import org.springframework.security.web.authentication.AuthenticationSuccessHandler; import org.springframework.security.web.authentication.logout.LogoutSuccessHandler; @Configuration @EnableWebSecurity public class SecurityConfig { private final CustomOAuth2UserService customOAuth2UserService; @Value("${frontend.url}") private String frontendUrl; public SecurityConfig(CustomOAuth2UserService customOAuth2UserService) { this.customOAuth2UserService = customOAuth2UserService; } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .csrf(AbstractHttpConfigurer::disable) .authorizeHttpRequests(auth -> auth .requestMatchers("/api/v1/download/clip/**").authenticated() .requestMatchers("/api/v1/auth/login", "/api/v1/auth/user").permitAll() .requestMatchers("/api/v1/upload", "/api/v1/download/**").permitAll() .requestMatchers("/api/v1/edit/**", "/api/v1/process/**", "/api/v1/progress/**").permitAll() .requestMatchers("/api/v1/metadata/**").permitAll() .anyRequest().authenticated() ) .oauth2Login(oauth2 -> oauth2 .userInfoEndpoint(userInfo -> userInfo .userService(customOAuth2UserService) ) .successHandler(successHandler())) .logout(logout -> logout .logoutUrl("/api/v1/auth/logout") .logoutSuccessHandler(logoutSuccessHandler()) .invalidateHttpSession(true) .deleteCookies("JSESSIONID") ); return http.build(); } @Bean public AuthenticationSuccessHandler successHandler() { return (request, response, authentication) -> response.sendRedirect(frontendUrl); } @Bean public LogoutSuccessHandler logoutSuccessHandler() { return (request, response, authentication) -> response.sendRedirect(frontendUrl); } }