Post

Spring에서 doFilter 활용하기: Filter와 Interceptor의 차이와 실제 코드 예제

spring 에서 filter 와 interceptor 는 무슨 차이인가요?


Spring 에는 dofilter 라는 것이 존재한다. interceptor 와 유사하지만 약간의 차이점이 있다.

graph LR
    Client --> dofilter --> dispatcherServlet --> interceptor --> controller

(dispatcherServlet 부터 Spring 내부라고 생각을 하면 된다.)

필터는 우선! 말 그대로 요청과 응답을 거르는 역할을 한다! spring 에 들어오기 전부터 실행이 될 수 있다!!

interceptor 는 dispatcherServlet 이 Controller 에 요청을 보내기 전과 후에 불러서 사용 할 수가 있다 표로 정리하면 아래와 같다!

 FilterInterceptor
관리servlet containerspring container
req,res 조작 가능OX
용도인증, 모든것 로깅, spring과 분리되어야 하는 기능들Controller 로 넘겨 주려는 정보 가공, API 호출에 대한 로깅

dofilterInternal 사용하기


아래 처럼 간단한 authCheck 를 진행하고 바로 spring 으로 들어오기 전에 error 를 보낼 수 있다. 아무런 에러가 없다면 filterChain.doFilter(request, response); 으로 원래 하려던 대로 dispatcherServlet 으로 보내준다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CustomFilter extends OncePerRequestFilter  {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        try {
            if (!authCheck(request)) {
                response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");
                return;
            }
            filterChain.doFilter(request, response); // dispatcherServlet 로 넘어감
        } catch (Exception e) {
            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, "Internal Server Error");
            e.printStackTrace();
        }
    }
}
This post is licensed under CC BY 4.0 by the author.

© 병욱. Some rights reserved.