작심 365
[Spring 개념 정리] Spring Filter 본문
참고 : inflearn 스프링 MVC 2 편
예전에 강의 들을 때는 잘 안 와닿았던 개념이었는데 프로젝트에 몇 번 Spring Security를 적용하다 보니 다시 한번 Filter 에 대해서 궁금해져서 이번에 다시 강의를 듣고 한번 정리하니까 이해가 되기 시작했다..
Spring Filter
정리
스프링 필터는 스프링 application에 들어오는 HTTP 요청과 나가는 HTTP 응답을 가로채서 어떤 처리를 할 수 있게 해주는 웹 필터이다.
서블릿 필터와 유사한 역할을 하지만, 스프링 프레임워크에 더 맞는 추가 기능을 제공한다.
필터의 흐름
HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러
필터를 적용하면 필터가 호출 된 다음에 서블릿이 호출된다. 예를 들어 모든 고객의 요청 로그를 남기는 요구사항을 구현해야 한다면 필터를 사용할 수 있다. 로그인 여부도 필터에서 처리해 줄 수 있다. (Spring Security 도 이런 필터 체인의 모음이라고 할 수 있다.)
필터는 특정 URL 패턴에 적용할 수 있다. /* 는 모든 URL 요청에 필터를 적용한다는 뜻이다.
실습 - 필터 생성하기
스프링 필터는 Filter interface를 구현해서 사용정의 필터를 만들 수 있다.
Filter interface는 init, doFilter, destroy 3개의 함수를 가지고 있기때문에 모두 구현해주어야 한다.
(참고 : default 가 붙은 함수는 반드시 구현할 필요는 없다)
Filter interface
LogFilter - Filter 를 구현해서 만든 요청시 log를 남기는 사용자 정의 Filter
코드를 보면 filterChain.doFilter() 를 호출해서 필터가 체인으로 구성되는 특징에 따라 다음 Filter를 호출해 줄 수 있다.
필터 체인
HTTP 요청 -> WAS -> 필터 1 -> 필터 2 -> 필터 3 -> 서블릿 -> 컨트롤러
필터는 체인으로 구성되어, 중간에 필터를 자유롭게 추가할 수 있다. 예를 들어 로그를 남기는 필터를 먼저 적용하고, 그 다음에 로그인 여부를 체크하는 필터를 만들 수 있다. (Spring Security 에서 자주 사용하는 JWT 토큰 인증 방식에도, 직접 만든 JWT 인증 필터를 원하는 위치에 추가하는 방식으로 구현하는 경우가 많다)
실습 - 필터 등록하기
사용자 정의 필터를 등록해서 실제로 요청시에 필터가 동작하도록 해준다.
@Configuration 이 붙은 클래스를 하나 만들고 우리가 만든 LogFilter를 등록해준다.
필터를 등록하는 방법은 여러가지가 있지만, 스프링 부트를 사용한다면 FilterRegisterBean 을 사용해서 등록하면 된다.
setFilter() : 등록할 필터를 지정한다.
setOrder() : 필터는 체인으로 동작하기 때문에 순서를 정해준다. 숫자가 낮을 수록 먼저 동작한다.
addUrlPatterns() : 필터를 적용할 URL 패턴을 지정한다. 한번에 여러 패턴을 지정할 수 있다.
우리가 정의한 필터 클래스에 @Component 를 붙여도 필터를 등록할 수 있다. 이 방법은 간단하지만 세부적인 설정 (URL 패턴, 필터 실행 순서 지정) 을 할 수 없다.
'Back-End > Spring' 카테고리의 다른 글
[Spring Security] Security 설정 후 일어나는 일 (2) | 2024.04.06 |
---|---|
[스프링 입문 강의 정리] sec2. 스프링 웹 개발 기초 (1) | 2023.11.07 |
[스프링 입문 강의 정리] sec1. 프로젝트 환경 설정 (0) | 2023.10.18 |