본문 바로가기

패스트캠퍼스/100% 환급 챌린지_2

패스트캠퍼스 환급챌린지 29일차 : Netplix 구독형 멤버십 프로젝트로 배우는 Spring Security 강의 후기

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

 

안녕하세요 :)

오늘은 챌린지 29일차로, 완전 새벽 공부 삘(?) 받아서 제대로 하는 중입니다.

 

오늘 배울 내용은,

Part B. 스프링 시큐리티 심화

Ch 2. 필터 체인 이용과 커스텀 필터

"02. 기존 필터 전 후로 커스텀 필터 추가" 입니다.


 

이번 시간에는 기존 필터에 커스텀 필터 추가하는 방법에 대해 알아보았다. 기본으로 제공되는 필터에 직접 만든 필터를 앞/뒤로 추가할 수 있다.
예시와 함께 알아보면, 모든 요청에 Request-ld 가 존재한다고 가정을 해보자.
- 애플리케이션에서는 이 Request-ld 를 활용하여 요청에 대한 트래킹을 한다(Tracing 용).
- 따라서 Request-Id 는 필수로 전달되어야 한다.
- Request-Id 가 진달되는지에 대한 검증은 인증 검증을 수행하기 전에 진행하려고 한다.
- 인증 검증 전에 수행하는 이유는 인증 검증 자체가 DB I/0 가 발생하거나 추가적인 리소스를 필요로 하는 것이기 때문에 유효하지 않은 요청에 대해서는 아예 시도를 하지 않도록 하기 위함이다(리소스 최적화 관점).

그러면 어떻게 할수 있을까?

기존 필터에 커스텀 필터 추가하면 된다.


단계1. 필터를 구현한다.
- 인입되는 요청에 원하는 헤더 값이 존재하는지를 검증하는 필터 클래스를 생성한다.


단계2. 필터 체인에 해당 필터를 추가한다.
- 기존 필터에 헤더를 검증하는 필터를 추가한다.

RequestValidationFilter 의 흐름을 살펴보자.
1. 인입된 요청 헤더에 Request-ld 가 존재하는지 확인한다.
2. 만약 존재하면 체인의 다음 필터로 전달한다.
3. 만약 존재하지 않으면 HTTP 400 Bad Request 응답을 반환한다.

SecurityFilterChain 빈을 등록하고, HttpSecurity 에 addFilter 메소드를 활용한다.
- 기존 필터 앞/뒤로 추가할 수 있다.
- 이번 예시에서는 인증 전에 요청에 대한 검증을 수행해야 하기 때문에 addFilterBefore 를 활용한다.

addFilterBefore 활용에 대해 알아보면, HTTP Basic 인증을 담당하는 BasicAuthenticationFilter 가 수행되기 전에 RequestValidationFilter 를 수행하도록 설정한다.
- 예시의 간단함을 위해 인증되지 않은 요청을 허용하도록 설정한다.

doFilter 에 대해서는, Request-ld 에 입력한 "Hello" 가 확인된다. 해당 값이 존재하기 때문에 다음 필터로 전달한다는 것을 알 수 있었다.