필터는 서블릿에서 제공하는 기술이다.
특정 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 패턴을 적용할 수 있는데, 매우 정밀하게 설정할 수 있다.