Spring Security 사용 중 security에서 어떻게 동작하는 지 궁금해져서 filter에 대한 내용을 찾아봤는데 사용 방법이 각 사용자 마다 조금씩 달라서 확인해봤더니 filter, OncePerRequestFilter를 사용하는 두 사용자가 존재하였다.
Filter와 OncePerRequestFilter의 차이점 기입
Filter
를 조금 더 확장하여 스프링에서 제공하는 필터가 있는데 그것이 바로 GenericFilterBean
이다.GenericFilterBean
은 기존 Filter
에서 얻어올 수 없는 정보였던 Spring의 설정 정보를 가져올 수 있게 확장된 추상 클래스
이다.이 두 필터는 한 가지 공통점이 있는데 매 서블릿 마다 호출이 된다는 것이다.
문제는 이 서블릿이 다른 서블릿으로 dispatch
되는 경우가 있을 수 있다.
Spring Security
에서 인증과 접근 제어 기능이 Filter
로 구현되어진다.RequestDispatcher
클래스에 의해 다른 서블릿으로 dispatch
되게 되는데, 이 때 이동할 서블릿에 도착하기 전에 다시 한번 filter chain
을 거치게 된다.Filter
나 GenericFilterBean
로 구현된 filter
를 또 타면서 필터가 두 번
실행되는 현상이 발생할 수 있다.OncePerRequestFilter
이다.OncePerRequestFilter
는 그 이름에서도 알 수 있듯이 모든 서블릿에 일관된 요청을 처리하기 위해 만들어진 필터이다.사용자의 한번에 요청 당 딱 한번만
실행되는 필터를 만들 수 있다.