33import com .cmg .comtogether .common .security .CustomAccessDeniedHandler ;
44import com .cmg .comtogether .common .security .CustomAuthenticationEntryPoint ;
55import com .cmg .comtogether .jwt .filter .JwtAuthenticationFilter ;
6+ import jakarta .annotation .PostConstruct ;
67import lombok .RequiredArgsConstructor ;
78import org .springframework .context .annotation .Bean ;
89import org .springframework .context .annotation .Configuration ;
910import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
1011import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
1112import org .springframework .security .config .annotation .web .configurers .AbstractHttpConfigurer ;
1213import org .springframework .security .config .http .SessionCreationPolicy ;
14+ import org .springframework .security .core .context .SecurityContextHolder ;
1315import org .springframework .security .crypto .bcrypt .BCryptPasswordEncoder ;
1416import org .springframework .security .crypto .password .PasswordEncoder ;
1517import org .springframework .security .web .SecurityFilterChain ;
1618import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
1719import org .springframework .web .cors .CorsConfigurationSource ;
20+ import jakarta .servlet .DispatcherType ;
1821
1922@ Configuration
2023@ EnableWebSecurity
@@ -25,9 +28,17 @@ public class SecurityConfig {
2528 private final CustomAuthenticationEntryPoint authenticationEntryPoint ;
2629 private final CustomAccessDeniedHandler accessDeniedHandler ;
2730
31+ @ PostConstruct
32+ public void enableThreadSecurityContextPropagation () {
33+ SecurityContextHolder .setStrategyName (SecurityContextHolder .MODE_INHERITABLETHREADLOCAL );
34+ }
35+
2836 @ Bean
2937 public SecurityFilterChain securityFilterChain (HttpSecurity http , CorsConfigurationSource corsConfigurationSource ) throws Exception {
3038 http
39+ // async dispatch는 Security 필터 적용 대상에서 제외
40+ .securityMatcher (request -> request .getDispatcherType () != DispatcherType .ASYNC )
41+
3142 .csrf (AbstractHttpConfigurer ::disable ) // CSRF 비활성화
3243 .httpBasic (AbstractHttpConfigurer ::disable ) // Basic Auth 비활성화
3344 .formLogin (AbstractHttpConfigurer ::disable ) // Form Login 비활성화
0 commit comments