본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.
안녕하세요 :)
오늘은 챌린지 28일차로, 한 주간 가장 힘든 헬요일 잘 넘기고 왔습니다..
오늘 배울 내용은,
Part B. 스프링 시큐리티 심화
Ch 2. 필터 체인 이용과 커스텀 필터
"01. 스프링 시큐리티 아키텍쳐의 필터 체인" 입니다.

오늘은 HTTP 필터에 대해 살펴봤다. 스프링 시큐리티에서의 HTTP 필터는 HTTP 요청에 적용되는 다양한 책임을 위임한다.
- 필터는 체인 형식으로 동작한다(요청을 받아 실행하고 다음 필터에 요청을 위임함).
야구장에 입장하는 순서를 생각해보면:
1) 티켓에 있는 QR 코드를 보여주며 통과한다.
2) 짐 검사대에서 반입 금지 물품이 있는지 확인하며 통과한다.
3) 각 자리에 들어가기 전 티켓과 함께 최종 검사를 한번 더 진행한다.
=> 만약 하나라도 통과를 못하면 예약한 야구장 좌석에 착석이 어렵다.
스프링 시큐리티에서도 비슷하다. 기본 설정으로 되어 있는 필터와 커스텀하게 설정된 필터를 함께 사용하여 HTTP 요청을 필터링한다. 각 필터는 요청을 받고 각 담당 관리자에게 위임을 함
실무의 다양한 비즈니스 요구사항을 구현하기에는 기본 필터 구성으로는 부족함이 많다. 따라서 구성 요소를 필터 체인에 추가하거나 대체하는 방법을 습득할 필요가 있다.
예를들어, HTTP Basic 인증 방식 이외에 다른 인증 전략을 구현해야할 때나, 권한 부여 이벤트를 외부 시스템에 전달해야 할 때나, 인증에 대한 로깅이 필요할 때이다.
스프링 시큐리티가 제공하는 필터 이외의 커스텀 필터를 기본 필터 체인 앞/뒤로 추가할 수 있다(또는 기본 체인을 대체할 수도 있음).
스프링 시큐리티 아키텍쳐의 필터는 일반적인 HTTP 필터로, 필터를 생성하기 위해서는 jakarta.servlet 패키지의 Filter 인터페이스를 구현하며, doFilter() 메소드를 구현해야 한다. ServletRequest, ServletResponse, FilterChain 을 파라미터로 전달 받는다.
ServletRequest: HTTP 요청에 대해 알아보면,
ServletResponse: HTTP 응답. 클라이언트로 전달하기 전 응답을 변경할 수 있다.
FilterChain: 필터 체인. 체인의 다음 필터로 전달한다.
필터 체인은 필터가 작동하는 순서가 정의된 필터의 모음을 나타낸다. 필터 구현체에는 각자의 순서가 존재하며, 예시로, HTTP Basic 인증 방식을 적용하기 위해서 .httpBasic()을 호출하면 필터 체인에 BasicAuthenticationFilter 가 추가된다. 각 필터는 순서가 존재하고 기본 필터들은 미리 정의된 필터의 순서 번호를 가지고 있음. 개발자가 직접 필터를 추가하면 설정에 따라 기본 필터 전/후/사이에 추가가 되는 것을 알 수 있다. 여기에서 주의해야 할 점은 같은 위치에 두 개 이상의 필터가 적용될 수 있다는 것과, 동일한 위치라면 필터의 순서는 정해지지 않는다는 것이다(순서 보장이 안 되는 이슈가 있음).