❯ 보안이 적용된 웹 요청의 일반적인 흐름
사용자가 리소스를 요청하면 적절한 사용자인지 확인(인증)하고, 인증된 사용자에 대해서 접근 권한이 있는지 검증(인가)한다.
사용자의 요청이 엔드포인트(Controller 등)를 거쳐서 리소스에 도달하기 전에 위 그림과 같이 인증관리자 혹은 접근 결정 관리자같은 컴포넌트가 웹 요청을 가로채서 인증/인가를 수행하게 된다.
이처럼 서블릿 기반 애플리케이션에서 애플리케이션 엔드포인트에 요청이 도달하기 전에 요청을 가로채서 처리를 할 수 있도록 하는 것이 서블릿 필터(Servlet Filter)이다. 서블릿 필터는 인터페이스 형태로 정의되어 있으며 doFilter() 메서드 호출을 통해 필터 체인을 형성한다.
서블릿 필터는 하나 이상의 필터를 연결해서 필터 체인(Filter Chain)을 구성할 수 있다.
❯ Spring Security에서 필터의 역할
서블릿 필터와 연결되는 Spring Security의 필터를 ApplicationContext에 Bean으로 등록한 후 Bean을 이용해서 보안과 관련된 작업을 처리한다.
이 때 사용되는 두가지 필터가 DelegatingFilterProxy와 FilterChainProxy이다.
- DelegatingFilterProxy: 서블릿컨테이너 영역의 필터와 ApplicationContext에 Bean으로 등록된 필터를 연결하는 역할.
- FilterChainProxy: 보안을 위한 작업을 처리하는 필터의 모음. Spring Security의 Filter를 사용하기 위한 진입점.
Filter와 Filter Chain 구현
Servlet Filter Chain은 요청 URI Path를 기반으로 HttpServletRequest를 처리한다.
따라서 요청이 들어오면 서블릿 컨테이너는 요청 URI 경로를 기반으로 어떤 Filter 와 어떤 Servlet을 매핑할지 결정하게된다.
Filter 인터페이스를 구현한 클래스를 만들어서 필터를 정의할 수 있고,
@Configuration 클래스에 해당 필터를 등록하면 필터가 적용된다.
Spring Boot에서 Servlet Filter는 FilterRegistrationBean의 생성자로 Filter 인터페이스 구현객체를 넘겨주는 형태로 @Bean으로 등록할 수 있다.
참고자료
'부트캠프 개발일기 > Spring Security' 카테고리의 다른 글
66일차: Spring Security에 JWT 적용 (0) | 2023.05.17 |
---|---|
65일차: 자격 증명 / JWT 인증 (0) | 2023.05.16 |
64일차: 인증(Authentication), 인가(Authorization) (0) | 2023.05.15 |
62일차: Spring Security (0) | 2023.05.12 |
61일차: 인증/보안 기초 (0) | 2023.05.10 |