FeelingXD

[Spring-Security] 스프링 부트3 에서 특정 url 에 스프링 시큐리티 필터 무시하기 본문

프로그래밍/Spring

[Spring-Security] 스프링 부트3 에서 특정 url 에 스프링 시큐리티 필터 무시하기

FeelingXD 2024. 3. 8. 06:18

TLDR;

스프링 부트 2.x 버전에서는 스프링 시큐리티 특정 URL 에대한 스프링 필터를 무시하기 위해 WebSecurityConfigurerAdapter 를 사용했다.

하지만 WebSecurityConfigurerAdapter 가 deprecate 되고 나서는 다음과 같이 사용한다.

기존 WebSecurityConfigurerAdapter 를 상속하는 방법은 다음과 같았다.

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) {
        web.ignoring().antMatchers("/ignore1", "/ignore2");
    }

}

WebSecurityConfigurerAdapter를 확장한 config 클래스를 만들고 configure를 오버라이드 해서 특정 url 에 대해 어떤 작업을할지 지정할 수 있었다.

WebSecurityConfigurerAdapter를 사용하지않고는 다음과 같이 할 수 있다.

    @Bean
    public WebSecurityCustomizer webSecurityCustomizer(){
        return web -> web.ignoring().requestMatchers("/users/reissue");
    }

WebSecurityCustomizer는 SpringSecurity 의 @Funcionalinterface 중하나로 Webseurity 에 대해 재 정의한다.

@FunctionalInterface
public interface WebSecurityCustomizer {
    void customize(WebSecurity web);
}

SecurityFilterChain vs WebSecurityCustomizer

SpringSecurity 에서 대부분의 경우 FilterChain을 통해 조정을 했기에 WebSecurityCustomizer에 대해 궁금증이 생겻다. 🤔

    1. WebSecurityCustomizer:

WebSecurityCustomizer는 Spring Security의 구성을 커스터마이징하기 위해 사용되는 인터페이스입니다. 이 인터페이스를 구현하여 웹 보안 구성을 변경하고 필요한 보안 규칙을 추가할 수 있습니다. 주로 Java 구성 파일에서 사용됩니다. 예를 들어, 인증 및 인가 규칙, 로그인 페이지, 로그아웃 처리 등을 구성할 수 있습니다.

    1.  
    2. SecurityFilterChain:

SecurityFilterChain은 Spring Security의 필터 체인을 구성하는 역할을 합니다. 필터 체인은 웹 요청에 대한 보안 필터들의 연속입니다. 각 필터는 특정한 보안 작업을 수행하며, 필터 체인을 통해 요청이 순차적으로 처리됩니다. SecurityFilterChain은 보안 필터들의 구성을 정의하고, 필터의 순서와 조건을 지정합니다. 주로 XML 구성 파일 또는 Java 구성 파일에서 사용됩니다. 여러 개의 SecurityFilterChain을 정의할 수 있으며, 각각의 필터 체인은 특정한 URL 패턴 또는 요청 조건에 따라 적용됩니다.

  1.  

AI 답변을 받아봤지만 모호한것같다.

WebSecurityCustomizer 와 SecurityFilterChain 은 모두 SpringSecurity 보안 상황과 관련있지만

SecurityFilterChain의 경우에 순회하는 필터의 등록을 하여 모든 요청에 대해 적용한다.

하지만 간혹 특정 URL 등에서는 Security가 작동이 필요없는 경우, 열려있는 리소스 자원 요청의경우 filterchain을 거치지않으려면
WebSecurityCustomizer 를 통해 좀더 필터를 무시하는등 조금더 다양한 방법으로 사용할 수 있게한다.

  • 범용적으로 사용하는경우 SecurityFilterChain에 등록해서 사용
  • 특정URL, 혹은 FilterChain을 거치지 않거나세세한 조정이 필요한경우 는 WebSecurityCustomizer를 사용