JAVA

[JAVA] JWT인증 토큰을 거치지 않는 예외 API 설정하기 방법 종합

오선지♬ 2024. 11. 24. 12:50
728x90
반응형
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    private final JwtRequestFilter jwtRequestFilter;

    public SecurityConfig(JwtRequestFilter jwtRequestFilter) {
        this.jwtRequestFilter = jwtRequestFilter;
    }

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
                .httpBasic().disable()
                .csrf().disable()
                .authorizeHttpRequests()
                // 인증 없이 허용할 API
                .antMatchers("/api/public/**", "/v3/api-docs/**", "/swagger-ui/**").permitAll()
                // 나머지 요청은 인증 필요
                .anyRequest().authenticated()
                .and()
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
                .and()
                .addFilterBefore(jwtRequestFilter, UsernamePasswordAuthenticationFilter.class)
                .build();
    }

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer() {
        return (web) -> web.ignoring()
                // 완전히 인증 제외할 경로
                .antMatchers("/api/health", "/api/status");
    }
}

각 방법의 차이점

설정 방법동작 방식사용 시기

HttpSecurity 특정 경로를 인증 없이 허용 (permitAll()) 인증은 우회하되 다른 보안 필터는 적용할 때
WebSecurityCustomizer 특정 경로를 Spring Security 필터 체인에서 완전히 제외 (web.ignoring()) 보안 필터 체인 자체를 완전히 비활성화할 때

결론

  • 인증만 우회하려면 HttpSecurity의 permitAll()을 사용하세요.
  • 특정 경로에서 Spring Security 설정 자체를 무시하려면 WebSecurityCustomizer를 사용하세요.

필요한 API의 목적과 보안 요구 사항에 따라 적절한 방법을 선택하면 됩니다.

728x90
반응형