Filter, Interceptor 정리

Lee Seung Jae·2022년 2월 21일
0

필터와 인터셉터

사이드 프로젝트를 하면서, 그리고 최근 회사의 프로젝트를 진행하면서

로깅처리와 더불어 어떠한 인증에 관한 것을 처리할 때 항상 필터를 구현했다.

이 필터가 뭔가 했더니 내가 옛날에도 들었었던 지식이지만 그냥 넘어가는 경우였고,

하다못해 스프링 동작과정에 정리해도

필터와 인터셉터에 관한 내용은 빼먹고 업로드를 한 것같다.

image

스프링 mvc의 기본 흐름에 대한 조금 더 구체적인 그림을 가져왔다.

다른 플로우차트를 찾아보려고 했지만 없더라.

실행

일단 서블릿 Request요청이 오게되면 바로 Filter로 가게된다.

여기서 무조건 동작을 받아서 처리를 해주고 이 필터들이 쭉 이어진것이 바로 필터체인이다.

image

필터 내부의 설명에서 보는것과 같이 doFilter 이 메소드에서 필터링을 수행하기 때문에

필터를 하나하나 등록해주게 되면 스프링은 요청을 받을때 저 필터들을 쭉쭉 통과해 나간다.

그다음에 DispatcherServlet으로 가게 되는 것이다.

서버를 실행시키면 Servlet이 올라오는 동안 init이 실행될 것이고

그 후에 doFilter가 수행될 것이다.

필터

이 필터는 아까도 말했듯, DispatcherServlet 이전에 실행되기 때문에 뭔가를 걸러주거나, 요청내용을 변경, 그리고 말했던 로깅처리 등을 진행할 수도있다.

public interface filter {
    public default void init(FilterConfig filterConfig) throws ServletException{}// - 필터 인스턴스 초기화

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;// - 전/후 처리

    public default void destroy() {}// - 필터 인스턴스 종료
}

이런식으로 세가지의 구성으로 되어있다.

image

doFilter에 있는 ServletRequest 객체는 매개변수 이름, 값 속성 등을

포함하는 데이터를 제공해준다.

web.xml에서 정리할 수도 있고, 나는 스프링 부트를 쓰기 때문에

javax.servlet.Filter를 구현해 주었다.

인터셉터

인터셉터는 말 그대로 가로채기이다.

필터는 스프링 외적으로 존재해서 스프링과는 상관없는 자원에 동작한다.

인터셉터는 DispatcherServlet 이 컨트롤러를 호출하기 전,후에 가로채려고 하기 때문에

스프링 컨텍스트 내부에서 Controller에 관한 요청, 응답에 대해 관여할 수 있다.

인터셉터는 여러 개를 사용할 수 있고 로그인 체크, 권한체크, 프로그램 실행시간 계산작업 로그확인 등의 처리가 가능하다.

  • preHandler()
    • 컨트롤러 메서드가 실행되기 전
  • postHanler()
    • 컨트롤러 메서드 실행직 후 view페이지 렌더링 되기 전
  • afterCompletion()
    • view페이지가 렌더링 되고 난 후

image

동작과정을 보면 이해가 될 수 있다.

지금 내 사이드 프로젝트에서 로그인 세션 null체크 기능이 잡다하게 중복이 되어있다.

도대체 학원에선 왜 이렇게 해도 뭐라안했을까 싶은 그런 로직들..

이 개념을 좀 도입해서 로깅처리와 로그인 기능을 좀 더 단순하게 구성을 해야겠다.

조바심 느끼지말고 남하고 비교하지말고 어제의 나보다만 성장해있으면 되는것 같다.

profile
💻 많이 짜보고 많이 경험해보자 https://lsj8367.tistory.com/ 블로그 주소 옮김

0개의 댓글