본문 바로가기

개발/Spring

[Spring] 필터

필터

 

필터는 클라이언트에서 온 요청을 최초로 받고, 클라이언트로 보내는 응답의 최총 단계에 위치해있다. (클라이언트와 dispatcherservlet 사이) 그래서 클라이언트의 요청과 응답에 부가적인 정보를 붙이거나 처리를 해줄 때 사용한다. 주로 로깅이나 보안과 관련된 작업을 할 때 사용되며 인증, 인가 로직을 비즈니스 로직과 분리할 수 있다는 장점이 있다.

 

 

 

필터 체인

 

docs.spring.io

 

필터는 위의 사진처럼 여러개가 연결되어있는 상태로 사용할 수 있다.

 

 

 

chain.doFilter(request, response);

 

FilterChain에서는 doFilter를 사용하여 다음 필터로 정보를 넘기고, 여러 필터를 순차적으로 적용할 수 있는데 필터에 대해 제대로 이해를 못 했을 때 마지막 필터임에도 doFilter를 사용해야하는 이유가 궁금했다.

 

1. 서블릿으로 최종 요청 전달

  마지막 필터는 서블릿으로 최종적인 요청을 넘겨주어야하는데 doFilter를 사용해서 넘겨줄 수 있다.

 

2. 응답 처리 

  반대로 서블릿에서 응답을 보내줄 때는 마지막 필터부터 순차적으로 필터를 통과해야하기 때문에 마지막 필터가 이전 필터로 응답을 전달 해 줄 때도 doFilter가 필요하다.

 

마지막 필터에도 doFilter가 존재해야 서블릿이 정상적으로 실행되며, 응답이 클라이언트에게 전달되기 전후에 필요한 모든 작업이 수행될 수 있다.