package edu.prlab.ecsimple.config; import edu.prlab.ecsimple.filter.*; import edu.prlab.ecsimple.service.AccountServiceImpl; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration; 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.configuration.WebSecurityConfiguration; import org.springframework.security.config.annotation.web.configuration.WebSecurityCustomizer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import java.util.Arrays; @Configuration @EnableWebSecurity @RequiredArgsConstructor public class SecurityConfig { private final AccountServiceImpl accountService; private final JwtTokenProvider jwtTokenProvider; private final JwtConfig jwtConfig; private final CustomAuthenticationManager authenticationManager; @Bean public UserDetailsService userDetailsService() { return accountService; } // @Bean // public AuthenticationManager authenticationManager(AuthenticationConfiguration authenticationConfiguration) throws Exception { // return authenticationConfiguration.getAuthenticationManager(); // } @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.cors().and() .csrf().disable() .logout().disable() .formLogin().disable() .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeRequests() .antMatchers("/h2**").permitAll() // .addFilterBefore(new JwtAuthenticationFilter(authenticationManager, jwtTokenProvider, jwtConfig), UsernamePasswordAuthenticationFilter.class) // .addFilter(new JwtAuthorizationFilter(authenticationManager, jwtTokenProvider)) .anyRequest().permitAll(); http.headers().frameOptions().disable(); return http.build(); } @Bean CorsConfigurationSource corsConfigurationSource() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowedMethods(Arrays.asList("GET", "HEAD", "POST", "PATCH", "PUT", "DELETE", "OPTIONS")); corsConfiguration.applyPermitDefaultValues(); source.registerCorsConfiguration("/**", corsConfiguration); return source; } }