You will be fine

<Spring Security> 6. Filter 추가 되는 과정 살펴보기

by BFine
반응형

가. HttpSecurity

 a. filters

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.formLogin();
    }

}

  -  보통 Spring Security를 사용할때 위처럼 HttpSecurity의 메서드를 이용하여 원하는 기능의 Filter를 추가한다.

  -  위의 코드를 보면 이전글에서 보았던 Filter들 역시 HttpSecurity의 메서드를 이용했다는 것을 볼 수 있다.

  -  그러면 어떻게 설정들이 어떻게 필터로 추가가 되는지 궁금해져서 한번 따라가 보았다. 

 

 b. configurers

  -  HttpSecurity의 config 관련 메서드들은 모두 각각의 Configurer 클래스를 생성한다.   

  -  .anonymous 메서드로 예를들면 아래처럼 객체를 할당하고 AbstractConfiguredSecurityBuilder에 저장되는 것을 볼수 있다.

 

 c. Configurer -> Filter

  -  그러면 configurer들은 어떻게 FilterChainProxyFilter 형태로 저장되는건지 궁금해진다.    

  -  디버그 해보면 WebSecurity에서 FilterChainProxy를 생성하는 것을 볼 수 있는데 여기서 Filter들이 등록된다.

 -  이렇게 보면 저 build를 할때 어떤 작업을 해야 Filter가 생성되어지는지 궁금해진다.

 -  도대체 어디서 Filter를 생성하는지 찾기 힘들었는데 디버그해서 따라가보면 아래처럼 configurer들의 .configure 메서드를 실행하는게 보인다.

 -  아래에 thisHttpSecurity를 가리키고 있고 Vistor 패턴 느낌으로 각각 configurer들이 생성한 FilterHttpSecuirty에 추가하는 것을 볼 수 있다.

  -  즉 Security 설정할때 사용하는 HttpSecurity의 메서드들은 FilterChainProxyFilter형태로 추가가 된다.
  -  상세 절차는 바로 addFilter를 하는 것이 아닌 configurer 형태로 저장되어 각각의 configurer에서 Filter를 생성된다.

  -  이때 바로 추가가 되는것이 아니고 모든 configurer 설정이 끝난 이후 빌드될때 각각의 Filter들이 저장되며 이후에   FilterChainProxy 객체를 생성할때

     생성자의 파라미터로 추가가 되는 것이다.

반응형

블로그의 정보

57개월 BackEnd

BFine

활동하기