스프링 공식 문서를 따라 가며 작성하였습니다.

1. Filter와 FilterChain

Spring Security는 서블렛 필터를 기반으로 하기에 servlet container에서 작동한다.

이때 든 의문점은 다음과 같다. security config를 작성하다 보면 servlet container에서 작동한다기엔 애매한 영역들이 많다.(ex bean,repository 등) 어떻게 작동한다는 것일까? servlet container와 ioc 컨테이너는 서로 다른 영역이 아니었나?

이에 대한 설명은 바로 밑인 DelegatingFilterProxy에서 볼 수 있다.

DelegatingFilterProxy

공식문서의 글을 간단하게 요약하자면, DelegatingFilterProxy 내에는 bean이 존재하며 이 bean 내부에서 security filter가 실행된다. 그리고 이 bean을 FilterChainProxy라고 한다.

FilterChainProxy

이러한 FilterChainProxy 내부에서 security Filter가 돌아간다는 것을 보여준다.

중요한 Filter

스프링 시큐어리티를 자세히 알기 위해선, 중요한 몇몇 필터가 어떻게 동작하는지 정도는 알아야 할 것이다. 공식 문서에 따로 링크가 되어있는 Filter들은 다음과 같았다.

ForceEagerSessionCreationFilter UsernamePasswordAuthenticationFilter DigestAuthenticationFilter BasicAuthenticationFilter ExceptionTranslationFilter FilterSecurityInterceptor

필터들에 대한 자세한 내용은 공식 문서 참조, 다음 포스트에서 정리할 예정이다. https://docs.spring.io/spring-security/reference/servlet/architecture.html

커스텀 필터를 만드는 과정

filterChain을 bean을 등록해서 필터를 설정할 수 있다.

과거에는 WebSecurityConfigurerAdapter 클래스 상속받아 만들었지만, spring에서 상속보다는 bean을 통해 구현하는 것을 권장하고 있으며, 3.0 부터는 bean을 이용한 방식으로만 구현이 가능하다.