Spring - Servlet Filter

박민수·2023년 11월 14일
0

Spring

목록 보기
5/46
post-thumbnail

Servlet Filter

필터는 클라이언트의 요청을 필터링하기 위해 서블릿 실행 전후에 호출되는 객체이며, 공통 관심사를 처리하기에 적합한 기술이다. 예를들어 모든 페이지에서 로그인 유무를 확인해야 할 경우 각각의 컨트롤마다 로그인 유무를 체크 할 필요 없이, 필터를 이용하여 공통 로직을 한 곳에서 처리할 수 있다.

필터 인터페이스 생성

  • init() : 필터 초기화 메서드이며, 서블릿 컨테니어가 생성될 때 호출된다.
  • doFilter() : 클라이언트의 요청이 올 때마다 해당 메서드가 호출된다.
  • destroy() : 필터 종료 메서드, 서블릿 컨테니어가 종료될 때 호출된다.
public interface Filter {
     public default void init(FilterConfig filterConfig) throws ServletException{}
     
     public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException;
     
     public default void destroy() {}
}

필터 인터페이스 구현

필터를 사용하려면 필터 인터페이스를 구현해야 한다.

@Slf4j
public class LogFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        log.info("log filter init");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        log.info("log filter doFilter");
    }

    @Override
    public void destroy() {
        log.info("log filter destroy");
    }
}

필터 등록

  • setFilter(new LogFilter()) : 등록할 필터를 지정한다.
  • setOrder(1) : 필터는 체인으로 동작하기 때문에 순서를 지정해줘야 한다. 숫자가 낮을수록 우선순위가 높다.
  • addUrlPatterns("/*") : 필터를 적용할 URL 패턴을 지정한다. (여러 URL 패턴 지정 가능)
@Configuration
public class Config {
    @Bean
    public FilterRegistrationBean logFilter() {
        FilterRegistrationBean<Filter> filterRegistrationBean = new FilterRegistrationBean<>();
        filterRegistrationBean.setFilter(new LogFilter());
        filterRegistrationBean.setOrder(1);
        filterRegistrationBean.addUrlPatterns("/*");

        return filterRegistrationBean;
    }
}

참조
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-2

profile
안녕하세요 백엔드 개발자입니다.

0개의 댓글