본문 바로가기

수업 & 공부

Filter, Interceptor, AOP

왜 쓰는가?

이전 글 AOP와 같이 공통적으로 처리할 일들을 따로 빼서 관리하기 위해 사용한다.

이러한 공통 업무를 프로그램 전 후에서 자동으로 처리할수 있는 것 3가지가

Filter, Interceptor, AOP 이다

 

 

 

https://goddaehee.tistory.com/15https://goddaehee.tistory.com/154

 

적용순서

Filter -> Interceptor -> AOP -> Interceptor -> Filter 순으로

 

 1. 서버를 실행시켜 서블릿이 올라오는 동안 (FIlter) init이 실행되고 doFilter 실행

 2. Dispatcher Servlet이 실행된 후, 컨트롤러에 들어가기 전에 (Interceptor) preHandler 실행

 3. 컨트롤러에서 나와 postHandler, after Completion, doFilter 순으로 진행이된다

 4. 종료 시 destroy가 실행된다

 

 

 

1. Filter


Filter는 스프링 범위 밖인 웹 컨테이너(ex tomcat) 에 의해 관리가 되고,

Dispatcher Servlet에 요청이 전달되기 전/후에 url패턴에 맞는 모든 요청 부가작업을 처리할 수 있는 기능을 제공한다

 

출처 : https://mangkyu.tistory.com/173

 

 

public class SecondFilter implements Filter {

    Logger log = LoggerFactory.getLogger(this.getClass());

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("Create Second Filter");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info("**************** Second Filter Start ****************");
        chain.doFilter(request, response);
        log.info("**************** Second Filter End ****************");
    }

    @Override
    public void destroy(){
        log.info("Destroy Second Filter");
    }
}

 

Filter method

  • init  - 필터 객체를 초기화하고 서비스에 추가하기 위한 메소드
  • doFilter - url 패턴에 맞는 요청이 서블릿으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메소드이다 (전/후처리 담당)
  • destroy - 필터 객체를 제거하고 자원 반환하기 위한 메소드

 

용도 

  • 공통된 보안 및 인증/인가
  • 이미지/데이터 압축 및 인코딩
  • Spring과 분리되어야 하는 기능들

 

 

 

2. Interceptor


필터와 달리 Spring이 제공하는 기술이고 Spring Context에서 동작

Dispatcher Servlet이 Controller를 호출하기 전과 후의 요청과 응답을 참조/가공

 

 

Interceptor method

  • preHandle  - 컨트롤러가 호출되기 전 실행. 따라서 컨트롤러 이전에 처리해야 하는 작업이 있을 때 사용할 수 있다. 반환값이 true라면 다음 단계로 진행되만 false라면 작업을 중단하여 이후작업 진행하지 않는다
  • PostHandle - 컨트롤러가 호출되고 난 후 실행. 따라서 컨트롤러 이후 후처리 작업이 있을 때 사용할 수 있다. 하위 계층에서 작업을 진행하다가 중간에 예외 발생하면 postHandle은 호출되지 않는다
  • AfterCompletion - 모든 작업이 완료된 후 (뷰가 렌더링 된 이후) 에 실행된다. 요청 처리 중 사용한 리소스 반환할 때 사용하기 적합하다. postHandle 과 달리 중간에 예외가 발생해도 호출된다

 

https://velog.io/@totw5701/Spring-%EC%9D%B8%ED%84%B0%EC%85%89%ED%84%B0Interceptor

 

 

용도 

  • 세부적인 보안 및 인증/인가
  • API 호출에 대한 로깅 또는 감사
  • Controller로 넘겨주는 데이터 가공하기

 

 

 

 

3. AOP


 

 

AOP (Aspect Oriented Programming)

AOP (관점 지향 프로그래밍) 란? 흩어진 Aspect를 모듈화 할 수 있는 프로그래밍 기법 Aspect를 통해 위 공통 로직들을 모듈화 하고 어디에서 사용할지 정의및 관리한다 반복되거나 중복되는 부분들

dwc04112.tistory.com

 

 

 

 

 

 


 

[Spring] 필터(Filter) vs 인터셉터(Interceptor) 차이 및 용도 - (1)

Spring은 공통적으로 여러 작업을 처리함으로써 중복된 코드를 제거할 수 있도록 많은 기능들을 지원하고 있다. 이번에는 그 중에서 필터(Filter) vs 인터셉터(Interceptor)의 차이에 대해 알아보고자

mangkyu.tistory.com

 

 

[카카오 면접] Spring Filter, Interceptor, AOP

카카오 면접을 준비하면서, 공부했던 내용을 정리해놓고 다시 기억하기 위한 포스팅 자바 웹 개발을 하다보면, 공통적으로 처리해야 할 업무들이 많다. 예를들어 로그인 관련(세션체크)처리,

baek-kim-dev.site