[Filter vs Interceptor]
1. Filter는 Spring 범위 밖(Web Container)에서 처리되고,
Interceptor는 Spring 범위 안(Spring Container)에서 처리된다.
2. Filter는 공통된 보안작업, 모든 요청에 대한 확인, 이미지&데이터 압축 및 문자열 인코딩
Interceptor는 세부적인 보안작업, API 호출에 대한 확인, Controller로 넘겨주는 데이터 가공
3. Filter는 response, requset 파라미터를 조작할 수 있다.
Interceptor는 response, requset 파라미터를 조작할 수 없다.
//Filter의 경우 request, response 데이터를 다시 넘겨주기 때문에 조작 가능
public CustomFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
chain.doFilter(request, response);
}
}
//Interceptor의 경우 true를 넘겨주기 때문에 조작 불가능
public class CustomInterceptor implements HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
return true;
}
}
/*
* Filter의 메소드
* init : 필터 객체 초기화 메소드
* doFilter : 초기화 후 url-pattern에 맞는 모든 HTTP 요청이 디스패처 서블릿으로 전달되기 전에 웹 컨테이너에 의해 실행되는 메소드
* 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() {}
}
/*
* Interceptor의 메소드
* preHandle : Controller 호출 전 실행
* postHandle : Controller 호출 후 실행
* afterCompletion : 모든 작업이 실행된 후에 실행, Exception이 발생하더라도 실행되는 유일한 메소드
*/
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 {
}
}
반응형
'Java' 카테고리의 다른 글
@Valid - 객체 유효성체크 (0) | 2023.01.19 |
---|---|
API - MultipartFile 파일전송 (0) | 2023.01.19 |
COLLECTION (0) | 2023.01.19 |
DTO, DAO, VO 란? (0) | 2023.01.19 |
정규식을 활용한 문자열 검사 Matcher & Pattern Class + StringBuffer Class (0) | 2023.01.19 |