33import com .example .ai_tutor .domain .auth .application .CustomDefaultOAuth2UserService ;
44import com .example .ai_tutor .domain .auth .application .CustomUserDetailsService ;
55import com .example .ai_tutor .domain .auth .domain .repository .CustomAuthorizationRequestRepository ;
6+ import com .example .ai_tutor .global .config .security .auth .CustomOAuth2AuthorizationRequestRedirectFilter ;
7+ import com .example .ai_tutor .global .config .security .auth .CustomOAuth2AuthorizationRequestResolver ;
68import com .example .ai_tutor .global .config .security .handler .CustomSimpleUrlAuthenticationFailureHandler ;
79import com .example .ai_tutor .global .config .security .handler .CustomSimpleUrlAuthenticationSuccessHandler ;
810import com .example .ai_tutor .global .config .security .token .CustomAuthenticationEntryPoint ;
1416import org .springframework .security .authentication .AuthenticationManager ;
1517import org .springframework .security .authentication .dao .DaoAuthenticationProvider ;
1618import org .springframework .security .config .annotation .authentication .configuration .AuthenticationConfiguration ;
19+ import org .springframework .security .config .annotation .method .configuration .EnableMethodSecurity ;
1720import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
1821import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
1922import org .springframework .security .config .annotation .web .configurers .AbstractHttpConfigurer ;
2023import org .springframework .security .config .http .SessionCreationPolicy ;
2124import org .springframework .security .crypto .bcrypt .BCryptPasswordEncoder ;
2225import org .springframework .security .crypto .password .PasswordEncoder ;
26+ import org .springframework .security .oauth2 .client .web .OAuth2AuthorizationRequestRedirectFilter ;
2327import org .springframework .security .web .SecurityFilterChain ;
2428import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
29+ import org .springframework .security .web .authentication .logout .LogoutFilter ;
2530import org .springframework .web .cors .CorsConfiguration ;
2631import org .springframework .web .cors .CorsConfigurationSource ;
2732import org .springframework .web .cors .UrlBasedCorsConfigurationSource ;
2833
2934import java .util .Arrays ;
3035import java .util .List ;
3136
32- @ RequiredArgsConstructor
3337@ Configuration
38+ @ RequiredArgsConstructor
3439@ EnableWebSecurity
40+ @ EnableMethodSecurity
3541public class SecurityConfig {
3642
3743 private final CustomUserDetailsService customUserDetailsService ;
3844 private final CustomDefaultOAuth2UserService customOAuth2UserService ;
3945 private final CustomSimpleUrlAuthenticationSuccessHandler oAuth2AuthenticationSuccessHandler ;
4046 private final CustomSimpleUrlAuthenticationFailureHandler oAuth2AuthenticationFailureHandler ;
4147 private final CustomAuthorizationRequestRepository customAuthorizationRequestRepository ;
48+ private final CustomOAuth2AuthorizationRequestRedirectFilter customOAuth2AuthorizationRequestRedirectFilter ;
49+ private final CustomOAuth2AuthorizationRequestResolver customOAuth2AuthorizationRequestResolver ;
50+ private final JwtAuthenticationFilter jwtAuthenticationFilter ;
4251
43- @ Bean
44- public PasswordEncoder passwordEncoder () {
45- return new BCryptPasswordEncoder ();
46- }
47-
48- @ Bean
49- public JwtAuthenticationFilter customOncePerRequestFilter () {
50- return new JwtAuthenticationFilter ();
51- }
52-
53- @ Bean
54- public DaoAuthenticationProvider authenticationProvider () {
55- DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider ();
56-
57- authenticationProvider .setUserDetailsService (customUserDetailsService );
58- authenticationProvider .setPasswordEncoder (passwordEncoder ());
59-
60- return authenticationProvider ;
61- }
62-
63- @ Bean
64- public AuthenticationManager authenticationManager (AuthenticationConfiguration authenticationConfiguration ) throws Exception {
65- return authenticationConfiguration .getAuthenticationManager ();
66- }
6752
6853 @ Bean
6954 public SecurityFilterChain filterChain (HttpSecurity http ) throws Exception {
7055 http
7156 .cors (cors -> cors .configurationSource (corsConfigurationSource ()))
7257 .csrf (AbstractHttpConfigurer ::disable )
7358 .httpBasic (AbstractHttpConfigurer ::disable )
59+ .addFilterBefore (customOAuth2AuthorizationRequestRedirectFilter , OAuth2AuthorizationRequestRedirectFilter .class )
60+ .addFilterBefore (jwtAuthenticationFilter , LogoutFilter .class )
7461 .sessionManagement (session -> session .sessionCreationPolicy (SessionCreationPolicy .STATELESS ))
7562 .formLogin (AbstractHttpConfigurer ::disable )
7663 .exceptionHandling (exception -> exception .authenticationEntryPoint (new CustomAuthenticationEntryPoint ()))
@@ -88,15 +75,15 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
8875 .oauth2Login (oauth2 -> oauth2
8976 .authorizationEndpoint (authorization -> authorization
9077 .baseUri ("/oauth2/authorize" )
91- .authorizationRequestRepository (customAuthorizationRequestRepository ))
78+ .authorizationRequestRepository (customAuthorizationRequestRepository )
79+ .authorizationRequestResolver (customOAuth2AuthorizationRequestResolver ))
9280 .redirectionEndpoint (redirection -> redirection
9381 .baseUri ("/oauth2/callback/**" ))
9482 .userInfoEndpoint (userInfo -> userInfo
9583 .userService (customOAuth2UserService ))
9684 .successHandler (oAuth2AuthenticationSuccessHandler )
9785 .failureHandler (oAuth2AuthenticationFailureHandler ));
9886
99- http .addFilterBefore (customOncePerRequestFilter (), UsernamePasswordAuthenticationFilter .class );
10087 return http .build ();
10188 }
10289
@@ -113,6 +100,24 @@ public CorsConfigurationSource corsConfigurationSource() {
113100 source .registerCorsConfiguration ("/**" , configuration );
114101 return source ;
115102 }
103+ @ Bean
104+ public PasswordEncoder passwordEncoder () {
105+ return new BCryptPasswordEncoder ();
106+ }
107+
116108
109+ @ Bean
110+ public DaoAuthenticationProvider authenticationProvider () {
111+ DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider ();
117112
113+ authenticationProvider .setUserDetailsService (customUserDetailsService );
114+ authenticationProvider .setPasswordEncoder (passwordEncoder ());
115+
116+ return authenticationProvider ;
117+ }
118+
119+ @ Bean
120+ public AuthenticationManager authenticationManager (AuthenticationConfiguration authenticationConfiguration ) throws Exception {
121+ return authenticationConfiguration .getAuthenticationManager ();
122+ }
118123}
0 commit comments