99import org .clokey .domain .auth .service .JwtTokenService ;
1010import org .clokey .global .security .AppleAwareOAuth2AuthorizationRequestResolver ;
1111import org .clokey .global .security .JwtAuthenticationFilter ;
12- import org .clokey .helper .SpringEnvironmentHelper ;
13- import org .springframework .beans .factory .annotation .Value ;
12+ import org .clokey .global .security .SwaggerBasicAuthenticationFilter ;
1413import org .springframework .context .annotation .Bean ;
1514import org .springframework .context .annotation .Configuration ;
16- import org .springframework .context .annotation .Profile ;
17- import org .springframework .core .annotation .Order ;
1815import org .springframework .security .config .annotation .web .builders .HttpSecurity ;
1916import org .springframework .security .config .annotation .web .configuration .EnableWebSecurity ;
2017import org .springframework .security .config .annotation .web .configurers .AbstractHttpConfigurer ;
2118import org .springframework .security .config .http .SessionCreationPolicy ;
22- import org .springframework .security .core .userdetails .User ;
23- import org .springframework .security .core .userdetails .UserDetails ;
2419import org .springframework .security .crypto .bcrypt .BCryptPasswordEncoder ;
2520import org .springframework .security .crypto .password .PasswordEncoder ;
2621import org .springframework .security .oauth2 .client .registration .ClientRegistrationRepository ;
2722import org .springframework .security .oauth2 .client .web .OAuth2AuthorizationRequestCustomizers ;
2823import org .springframework .security .oauth2 .client .web .OAuth2AuthorizationRequestResolver ;
29- import org .springframework .security .provisioning .InMemoryUserDetailsManager ;
3024import org .springframework .security .web .SecurityFilterChain ;
3125import org .springframework .security .web .authentication .UsernamePasswordAuthenticationFilter ;
3226import org .springframework .web .cors .CorsConfiguration ;
3832@ RequiredArgsConstructor
3933public class SecurityConfig {
4034
41- private final SpringEnvironmentHelper springEnvironmentHelper ;
35+ private static final String [] SWAGGER_PATHS = {
36+ "/swagger-ui" , "/swagger-ui/**" , "/swagger-ui.html" , "/v3/api-docs" , "/v3/api-docs/**"
37+ };
38+
4239 private final CustomOAuth2UserService customOAuth2UserService ;
4340 private final OidcLoginSuccessHandler oidcLoginSuccessHandler ;
4441
45- @ Value ("${swagger.username:default}" )
46- private String swaggerUsername ;
47-
48- @ Value ("${swagger.password:default}" )
49- private String swaggerPassword ;
50-
5142 private void defaultFilterChain (HttpSecurity http ) throws Exception {
5243 http .httpBasic (AbstractHttpConfigurer ::disable )
5344 .formLogin (AbstractHttpConfigurer ::disable )
@@ -58,54 +49,27 @@ private void defaultFilterChain(HttpSecurity http) throws Exception {
5849 session .sessionCreationPolicy (SessionCreationPolicy .IF_REQUIRED ));
5950 }
6051
61- @ Bean
62- public InMemoryUserDetailsManager inMemoryUserDetailsManager () {
63- UserDetails user =
64- User .withUsername (swaggerUsername )
65- .password (passwordEncoder ().encode (swaggerPassword ))
66- .roles ("SWAGGER" )
67- .build ();
68-
69- return new InMemoryUserDetailsManager (user );
70- }
71-
7252 @ Bean
7353 public PasswordEncoder passwordEncoder () {
7454 return new BCryptPasswordEncoder ();
7555 }
7656
7757 @ Bean
78- @ Order (1 )
79- @ Profile ({"dev" , "local" , "prod" })
80- public SecurityFilterChain swaggerFilterChain (HttpSecurity http ) throws Exception {
81- defaultFilterChain (http );
82-
83- http .securityMatcher ("/swagger-ui/**" , "/v3/api-docs/**" ).httpBasic (withDefaults ());
84-
85- http .authorizeHttpRequests (authorize -> authorize .anyRequest ().authenticated ());
86-
87- return http .build ();
88- }
89-
90- /** 인증 없이 제공하고 싶은 API는 /public 으로 시작해야 합니다. */
91- @ Bean
92- @ Order (2 )
93- @ Profile ({"local" , "dev" , "prod" })
9458 public SecurityFilterChain apiFilterChain (
9559 HttpSecurity http ,
9660 JwtAuthenticationFilter jwtAuthenticationFilter ,
97- OAuth2AuthorizationRequestResolver authorizationRequestResolver )
61+ OAuth2AuthorizationRequestResolver authorizationRequestResolver ,
62+ SwaggerBasicAuthenticationFilter swaggerBasicAuthenticationFilter )
9863 throws Exception {
9964 defaultFilterChain (http );
10065
10166 http .authorizeHttpRequests (
10267 auth ->
103- auth .requestMatchers (
104- "/public/**" ,
105- "/swagger-ui/**" ,
106- "/v3/api-docs/**" ,
107- "/oauth2/**" ,
108- "/login/oauth2/**" )
68+ auth .requestMatchers ("/public/**" )
69+ .permitAll ()
70+ .requestMatchers ("/oauth2/**" , "/login/oauth2/**" )
71+ .permitAll ()
72+ .requestMatchers (SWAGGER_PATHS )
10973 .permitAll ()
11074 .anyRequest ()
11175 .authenticated ())
@@ -121,6 +85,9 @@ public SecurityFilterChain apiFilterChain(
12185 a .authorizationRequestResolver (
12286 authorizationRequestResolver ));
12387 })
88+ .addFilterBefore (
89+ swaggerBasicAuthenticationFilter ,
90+ UsernamePasswordAuthenticationFilter .class )
12491 .addFilterBefore (
12592 jwtAuthenticationFilter , UsernamePasswordAuthenticationFilter .class );
12693
@@ -158,7 +125,6 @@ public JwtAuthenticationFilter jwtAuthenticationFilter(JwtTokenService jwtTokenS
158125 }
159126
160127 @ Bean
161- @ Profile ({"local" , "dev" , "prod" })
162128 public OAuth2AuthorizationRequestResolver oauth2AuthorizationRequestResolver (
163129 ClientRegistrationRepository clientRegistrationRepository ) {
164130 AppleAwareOAuth2AuthorizationRequestResolver resolver =
0 commit comments