Programming/Spring

필터

우 선 2025. 9. 16. 12:01

.

Spring Filter와 Filter Chain 완전 정리


1. Filter란?

Filter는 클라이언트 요청(Request)과 서버 응답(Response) 사이에 개입할 수 있는 객체다.
주로 인증, 로깅, 인코딩, 보안 처리 등에 사용된다.
즉, Controller에 도달하기 전에 공통 기능을 처리하는 중간 모듈이라고 보면 된다.


2. Filter Chain이란?

  • 여러 개의 Filter가 순서대로 실행될 때, 이를 Filter Chain이라고 한다.
  • 각 Filter는 자신이 수행할 작업을 마친 뒤, chain.doFilter(request, response)를 호출해야 다음 Filter나 Controller로 요청이 전달한다.
  • chain.doFilter를 호출하지 않으면 요청이 더 이상 진행되지 않아, Controller가 실행되지 않는다.

3. Filter 적용 방법

(1) @Component로 등록

Spring이 자동으로 Bean으로 등록하고 Filter Chain에 포함한다.

@Component
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
        throws IOException, ServletException {

        System.out.println("필터 시작");
        chain.doFilter(request, response); // 다음 필터 또는 Controller로 전달
        System.out.println("필터 종료");
    }
}

(2) FilterRegistrationBean으로 등록

Bean으로 등록하지 않고, 특정 URL 패턴과 실행 순서를 지정할 때 사용한다.

@Bean
public FilterRegistrationBean<MyFilter> myFilterRegistration() {
    FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>();
    registration.setFilter(new MyFilter());
    registration.addUrlPatterns("/api/*"); // 적용 URL 패턴
    registration.setOrder(1); // 실행 순서
    return registration;
}

 


4. Filter 사용 예시

  • 인증 처리: JWT 토큰 검증, 세션 확인
  • 로깅: 요청 URL, 파라미터 기록
  • 공통 처리: 인코딩, CORS 설정

흐름 요약
클라이언트 요청 → Filter 1 → Filter 2 → Controller → Filter 2 종료 → Filter 1 종료 → 응답 반환


5. 오늘 배운 것 중 기억할 포인트

  1. Filter는 Controller에 도달하기 전 요청을 중간 처리할 수 있는 핵심 모듈이다.
  2. Filter Chain의 흐름과 chain.doFilter 호출 여부를 이해해야 요청이 정상적으로 진행된다.