Spring Security Filter를 사용하다보면 OncePerRequestFilter를 사용하는 코드와 GenericFilterBean를 사용하는 코드가 보입니다.
사용 배경
먼저 사용 배경에 대해서 얘기해 보겠습니다.
- 클라이언트로부터 요청이 오게되면 먼저 Filter Chain에 등록된 Filter1과 Filter2를 거려 API 1이 실행됩니다.
- API 1이 특정 URL로 리다이렉트 되는 API라면 302 code로 응답을 보내게 됩니다.
- 클라이언트는 302 code를 보고 재 요청으로 보내게 되고 다시 Filter1과 Filter2를 거쳐 API 2를 실행하게됩니다.
이런 과정에서 Filter 1과 Filter 2를 다시 거쳐야하는 불편함이 존재하게 되고
OncePerRequestFilter는 그 중복과정을 제거해주는 역할을 합니다.
두 구현방법은 어떤 차이가 있는지 궁금하여 찾아보았습니다.
GenericFilterBean
먼저 GenericFilterBean입니다.
기존의 Filter를 상속받아 기능을 추가한 추상 클래스입니다.
OncePerRequestFilter
다음은 OncePerRequestFilter입니다.
간단히 보아도 AlreadyFilteredAttribute라는 문구가 보입니다.
잘보시면 애초에 GenericFilterBean을 상속함을 알 수 있습니다.