- 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다.
 
서블릿 필터가서블릿이 제공하는 기술이라면,스프링 인터셉터는스프링 MVC 가 제공하는 기술이다.- 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다.
 HTTP요청->WAS->필터->서블릿->스프링 인터셉터->컨트롤러스프링 인터셉터는디스패처 서블릿과컨트롤러 사이에서컨트롤러 호출 직전에 호출된다.스프링 인터셉터는스프링 MVC가 제공하는 기능이기 때문에 결국디스패처 서블릿 이후에 등장하게 된다.정밀한 URL 패턴을 적용할 수 있다.
Handler Interceptor 인터페이스 사용
- 컨트롤러 호출 전 : preHandle
- 컨트롤러 호출 후 : postHandle
- 요청 완료 이후 	: afterCompletion, 뷰가 렌더링 된 이후에 호출된다.
public class LogInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); System.out.println("[interceptor] requestURI : " + requestURI); return true; // false -> 이후에 진행을 하지 않는다. } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("[interceptor] postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("[interceptor] afterCompletion"); }
public class LoginCheckInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestURI = request.getRequestURI(); System.out.println("[interceptor] : " + requestURI); HttpSession session = request.getSession(false); if(session == null || session.getAttribute(SessionConst.LOGIN_MEMBER) == null) { // 로그인 되지 않음 System.out.println("[미인증 사용자 요청]"); //로그인으로 redirect response.sendRedirect("/login?redirectURL=" + requestURI); return false; } // 로그인 되어있을 떄 return true; } }
order()			: 인터셉트의 호출 순서를 지정한다. 낮을 수록 먼저 호출된다.addPathPatterns("/**")	: 인터셉터를 적용할 URL 패턴을 지정한다.excludePathPatterns("/error")	: 인터셉터에서 제외한 패턴을 지정한다.url 패턴@Component public class WebConfig implements WebMvcConfigurer{ @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LogInterceptor()) // LogInterceptor 등록 .order(1) // 적용할 필터 순서 설정 .addPathPatterns("/**") .excludePathPatterns("/error"); // 인터셉터에서 제외할 패턴 registry.addInterceptor(new LoginCheckInterceptor()) //LoginCheckInterceptor 등록 .order(2) .addPathPatterns("/**") .excludePathPatterns("/", "/members/add", "/login", "/logout", "/css/**"); } }