티스토리 뷰

  • Spring Security와 JWT를 활용해서 회원 인증 기능을 구현하기 위해 여러 코드들을 보고 공부하던 중에
  • GenericFilter를 이용해 필터를 구현한 코드와 OncePerRequestFilter를 이용한 코드가 있어서 서로 어떤 차이가 있는지 궁금해서 찾아보았다.

개요

  • GenericFilter와 OncePerRequestFilter는 둘 다 대상을 필터로 등록해주는 인터페이스이다.
public class JwtFilter extends GenericFilterBean {

    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {

    }
}
public class JwtFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException, IOException {

    }
}

Filter 동작 흐름

  • Filterjavax.servlet-apitomcat-embed-core를 사용하면 제공되는 Servlet Filter Interface로써 클라이언트의 서블릿 요청을 가장 먼저 받는다.
    @Override
    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {

        // do Filter 실행 전 로직
        println("Before")
        chain?.doFilter(request, response) ?: throw Exception()
        // do Filter 실행 후 로직
        println("After")

    }
  • 서블릿이 호출되기 전에 Before를 출력하고 필터를 거쳐서 서블릿이 호출되면 After가 출력된다.
  • 이러한 Filter를 확장하여 Spring의 설정정보를 가져올 수 있게 만들어진 것이 GenericFilterBean이다.

  • Filter와 GenericFilterBean은 둘 다 매 서블릿마다 호출이 된다.
  • 서블릿은 사용자의 요청을 받으면 서블릿을 생성해 메모리에 저장해두고, 같은 클라이언트의 요청을 받으면 생성해둔 서블릿 객체를 재활용하여 요청을 처리한다.
  • 문제는 이 서블릿이 다른 서블릿으로 dispatch되는 경우이다.
  • 가장 대표적으로 Spring Security에서 인증과 접근 제어 기능이 Filter로 구현되는데 이러한 인증과 접근 제어는 RequestDispatcher 클래스에 의해 다른 서블릿으로 dispatch 되고, 이 때 이동할 서블릿에 도착하기 전에 다시 한번 filter chain을 거치게 된다.(Target API1 -> Target API2)
  • 한 번의 요청에 한 번의 인증 처리만 하면 되는데 불필요하게 여러번 중복되어 인증처리를 하게 되는 것이다.
  • 이런 문제를 해결하기 위해 등장한 것이 모든 서블릿에 일관된 요청을 처리하기 위해 만들어진 OncePerRequestFilter이다.
  • 이 추상 클래스를 구현한 필터는 사용자의 한 번의 요청 당 딱 한 번만 실행되는 필터를 만들 수 있다.

관련 자료

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함