서블릿 필터의 기본 구조는 다음과 같습니다.
javapublic class MyFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 요청 전처리 작업
chain.doFilter(request, response);
// 응답 후처리 작업
}
public void init(FilterConfig filterConfig) throws ServletException {
// 필터 초기화 작업
}
public void destroy() {
// 필터 종료 작업
}
}
서블릿 필터는 javax.servlet.Filter
인터페이스를 구현해야 합니다. doFilter
메서드에서는 요청과 응답을 가로채서 처리할 수 있으며, init
메서드에서는 필터 초기화 작업을 수행하고, destroy
메서드에서는 필터 종료 작업을 수행합니다.
스프링 부트에서의 필터는 javax.servlet.Filter
인터페이스를 구현할 필요가 없습니다. 대신 org.springframework.web.filter.OncePerRequestFilter
클래스를 상속받아 필터를 구현할 수 있습니다. 이 클래스는 서블릿 필터와 유사하게 요청과 응답을 가로채서 처리할 수 있습니다.
javapublic class MyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
// 요청 전처리 작업
filterChain.doFilter(request, response);
// 응답 후처리 작업
}
}
스프링 부트에서 필터를 등록하는 방법은 FilterRegistrationBean
클래스를 사용하는 것입니다. 다음은 스프링 부트에서 필터를 등록하는 예시입니다.
java@Configuration
public class AppConfig {
@Bean
public FilterRegistrationBean<MyFilter> myFilterRegistration() {
FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new MyFilter());
registration.addUrlPatterns("/api/*");
registration.setOrder(1);
return registration;
}
}
이렇게 등록된 필터는 /api/*
패턴으로 들어오는 요청에 대해 실행됩니다. setOrder
메서드를 사용하여 필터의 순서를 지정할 수 있습니다.