필터

필터는 서블릿에서 제공하는 기술이다.

특정 URL 패턴에 적용 가능하다.

필터 흐름

graph LR
  HTTP요청 --> WAS --> 필터 --> 서블릿 --> 컨트롤러
  classDef green fill:#9f6,stroke:#333,stroke-width:2px;
  class 필터 green

필터 제한

필터에서 적절하지 않은 요청으로 판단되면 서블릿에 요청을 전달하지 않을 수 있다.

graph LR
  HTTP요청 --> WAS --> 필터 --x|적절하지 않은 요청이라 판단, 호출 x| 서블릿
  classDef green fill:#9f6,stroke:#333,stroke-width:2px;
  class 필터 green

필터 체인

필터 체인으로 여러개의 필터 적용이 가능하다.

graph LR
	subgraph 필터체인
		필터1
		필터2
		필터3
	end
  HTTP요청 --> WAS --> 필터1 --> 필터2 --> 필터3 --> 서블릿 --> 컨트롤러
  
  classDef green fill:#9f6,stroke:#333,stroke-width:2px;
  class 필터체인 green

예외처리

에러를 던져도 ExceptionHandler 에서 처리 불가하여 서블릿으로 다시 올라온다.

따라서 다음과 같이 응답을 직접 출력해줘야 한다.

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse servletResponse = (HttpServletResponse) response;
    servletResponse.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    servletResponse.getWriter().print("INVALID AUTHENTICATION");
}

스프링 인터셉터

인터셉터는 스프링 MVC 가 제공하는 기술이다.

스프링 인터셉터에도 URL 패턴을 적용할 수 있는데, 매우 정밀하게 설정할 수 있다.

스프링 인터셉터 흐름