Spring filter 등록하기

freddie·2021년 4월 24일
0

spring

목록 보기
2/4

스프링을 개발하다보면 공통적인 처리를 위해 Filter를 개발해야 하는 경우가 있다.
Filter를 다양한 방식으로 등록할 수 있는데 잘 모르고 사용해서 당황했던 경험이 있어서 정리해본다.

Filter개요

  • 웹 요청에 대해 인코딩처리, CORS처리, LOG등의 공통적인 처리를 한다.
  • 일반적인 Filter는 스프링의 외부인 서블릿에서 동작하기 때문에 스프링의 기능을 활용하기 어렵다.

FilterRegistrationBean

Spring은 Filter 타입의 Bean을 자동으로 FilterRegistrationBean타입으로 변경하고, FilterRegistrationBean 타입의 빈을 /*에 매치되도록 등록한다.

spring의 ServletWebServerApplicationContext.selfInitialize()ServletContextInitializerBeans에서 관련 코드를 찾을 수 있었다.

만약 Filter를 bean으로 사용하고 싶은데, 자동으로 등록되는게 싫다면 아래처럼 등록해줘야 한다.

@Bean
fun timestampFilter() : FilterRegistrationBean<TimestampFilter> {
    val filter = FilterRegistrationBean(TimestampFilter())
    filter.isEnabled = false
    return filter
}

OncePerRequestFilter

Filter는 외부의 요청에 대해 한번만 실행되는 것처럼 보이지만, 정확히는 서블릿으로 dispatch할때 한번 실행되는 것이다.
일반적인 경우 한번의 dispatch가 발생하겠지만, 사실 request는 다른 서블릿으로 dispatch가 가능한 구조이다.

Spring security에서 주로 사용되는데, spring security는 필터체인으로 구성되어있고, 인증을 처리하는 과정은 요청 전체에서 한번만 진행되면 되기 때문에 OncePerRequestFilter를 사용한다.

참고

profile
하루에 하나씩만 배워보자

0개의 댓글