본문 바로가기
Spring

[Spring] Filter, Interceptor

by 코딩로그 2022. 10. 21.

Filter

1. 자바 서블릿에서 제공하는 기능

2. 톰캣(웹 컨테이너)에 의해 관리가 된다.

3. request를 받으면 DispatcherServlet으로 가기 전에 Filter가 수행되며, response를 보낼 때는 DispatcherServlet에서 Filter를 걸쳐 Client에게 가게 됩니다. 

4. request, response 객체에 대한 조작이 가능합니다.

5. Client <-> Filter <-> DispatcherServlet 의 구조

 

 

Filter 구현

public class MainFilter implements Filter

 

@Override
public void init(FilterConfig filterConfig) throws ServletException {
		//필터를 생성할 때 실행
}

 

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
	throws IOException, ServletException {
	//요청, 응답 시에 실행	
}

 

@Override
public void destroy() {	
	//필터가 소멸할 때 실행
}

 

 

 


Interceptor

1. DispatcherServlet과 Controller 사이에서 수행됩니다.

2. Filter와 달리 request, response에 대한 객체 조작이 불가능합니다.

3. DispatcherServlet <-> Interceptor <-> Controller의 구조

4. 로깅, 모니터링 정보 수집, 접근 제어 처리 등의 비즈니스 로직과는 분리되어 처리해야 하는 기능들을 넣고 싶을 때 사용됩니다.

5. Interceptor를 여러 개 설정할 수 있습니다. 

6. 스프링 컨테이너가 관리한다.

 

 

Interceptor 구현

1. HandlerInterceptor 인터페이스 또는 HandlerInterceptorAdapter 클래스를 상속하여 구현할 수 있습니다.

2. servlet-context.xml에서 interceptor를 설정합니다.

 

public class InterceptorTest implements HandlerInterceptor

 

 

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
	throws Exception {
	//false를 반환하면 request를 바로 종료
}

 

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
		ModelAndView modelAndView) throws Exception {
	//Controller 수행 후 호출
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
		throws Exception {
	//view를 통해 클라이언트에 응답을 전송한 뒤 실행
    //예외가 발생하여도 실행
}