
Filter 사용하기 위해서는 Filter interface 구현 필요!
public interface Filter {
default void init(FilterConfig filterConfig) throws ServletException {
}
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
default void destroy() {
}
}
init()
doFilter()
doFilter() 의 파라미터인 FilterChain에서 doFilter() 메소드를 통해 다음 대상으로 요청을 전달 가능chian.doFilter()로 전, 후에 우리가 필요한 처리 과정을 넣어줌으로써 원하는 처리를 진행할 수 있음chian.doFilter() 는 FilterChain의 메소드)public interface FilterChain {
void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}
destroy()
인터셉터 사용하기 위해서는 HandlerInterceptor 인터페이스 구현 필요!
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
preHandle()
postHandle()
afterCompletion()
| Filter | Interceptor |
|---|---|
| Request & Response 조작 가능 | Request & Response 조작 불가 |
| 보안 및 인증/인가 관련 작업 | 세부적인 보안 및 인증/인가 공통 작업 |
| 모든 요청에 대한 로깅 또는 검사 | API 호출에 대한 로깅 또는 검사 |
| 이미지/데이터 압축 및 문자열 인코딩 | Controller로 넘겨주는 정보 (데이터) 의 가공 |
| Spring과 분리되어야 하는 기능 | 클라이언트의 요청과 관련되어 전역적으로 처리해야 하는 작업 |