- Filter는 J2EE 표준 스펙 기능으로 Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공합니다.
- Front Controller인 Dispatcher Servlet의 앞에서 동작합니다. 따라서 Filter는 Spring의 범위 밖에서 동작하고 처리됩니다.
- Filter는 Spring Bean으로 등록은 되지만 Spring Container가 아닌 톰캣과 같은 Web Container에 의해 관리됩니다.
- Filter는 FilterChain을 통해 연쇄적으로 동작하도록 할 수 있습니다.
- Spring에서 Filter를 구현하기 위해서는 javax.servlet.Filter 인터페이스를 구현하여 사용할 수 있습니다. Filter Interface는 init, doFilter, destory 함수를 제공합니다.
- init() init은 초기화 로직을 수행하는 함수로 말 그대로 최초 생성될 때 실행됩니다.
- doFilter(ServletRequest request, ServletResponse response, FilterChain chain) doFilter 함수는 Request, Response가 필터를 거칠 때 수행되는 함수입니다.
- destory() destroy() 함수는 필터가 소멸될 때 실행되는 함수입니다.
- doFilter 함수를 통해 Request와 Response에 대한 접근이 가능합니다. 따라서 공통된 보안 및 인증/인가 작업, 모든 요청에 대한 로깅, 이미지/데이터 압축 및 문자열 인코딩, Spring과 분리되어야 하는 기능을 수행하는데 적합합니다.
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class BasicFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
log.info("[BasicFilter] init...");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
log.info("[BasicFilter] doFilter start...");
chain.doFilter(request, response);
log.info("[BasicFilter] doFilter end...");
}
@Override
public void destroy() {
log.info("[BasicFilter] destroy...");
}
}
728x90
반응형
'Domain > Spring' 카테고리의 다른 글
Spring Security (0) | 2023.05.31 |
---|---|
[Spring] Logging과 LoggingFramework (0) | 2022.09.02 |
[Spring] Web.xml (0) | 2021.11.30 |
[Spring] JPA 영속성 컨텍스트 (0) | 2021.11.18 |
[Spring] Context ( RootContext, ServletContext ) (0) | 2021.11.18 |
댓글