[Spring] 스프링 필터의 동작과정

이멀젼씨

·

2021. 6. 11. 10:11

목적

스프링 필터의 동작과정을 이해하기 위함

목차

  1. 필터의 동작과정

1. 필터의 동작과정

1. Application의 doFilter()

서버로 요청이 들어오면 StandardWrapperValve 클래스의 invoke메서드가 실행된다.

이 메서드는 FilterChain의 구현체인 ApplicationFilterChain을 가져와서 doFilter메서드를 실행한다.

FilterChain인터페이스는 Filter인터페이스와 마찬가지로 doFilter메서드가 존재하긴 하지만 필터가 아닌 필터체인 체인이기때문에 Filter인터페이스와는 달리 init과 destroy메서드는 제공하지 않는다.

2. doInternalFilter()

ApplicationFilterChain의 doFilter메서드는 내부에서 internalDoFilter메서드를 실행한다.

3. Filter 목록

internalDoFilter는 ApplicationFilterChain이 갖고 있는 필터목록을 순회하며, filter를 하나씩 꺼내어 doFilter메서드를 실행한다.

이때 request, response와 필터체인 자기자긴을 파라미터로 넘긴다.

4. 두 가지 종류의 필터

일반적으로 구현된 필터는 두 가지 케이스가 존재한다.

  • Filter인터페이스의 doFilter를 직접 구현한 필터
  • Filter인터페이스의 doFilter를 구현한 필터클래스를 상속하여 doFilterInternal을 구현한 필터

전자의 경우는 doFilter메서드를 호출하면 사용자가 직접 구현한 바로 로직이 실행된다.
후자의 경우엔 OncePerRequest필터처럼 doFilter메서드를 OncePerRequest필터 안에서 구현하고 doFilter에서 doFilterInternal을 호출하는 방식이다.

doFilterInternal은 추상메서드로 되어있어서 이를 사용자가 직접 구현해야 한다.

위에서 나온 ApplicationFilterChain도 후자의 방식으로 되어있다.

5. filter.doFilter의 호출

doFilter의 로직이 종료되면 파라미터로 넘겼던 ApplicationFilterChain객체의 doFilter메서드를 다시 호출하여 재귀적으로 다음 필터가 수행될 수 있도록 한다.