스프링에서는 URL의 특정 패턴을 처리할 수 있는 옵션들을 제공하고 있다. 본 프로젝트에서는 여러 옵션 중 ViewController와 Interceptor를 설정하는 것을 다룰 것이다.
우선 기본적인 Web MVC 설정 클래스 생성 방법은 다음과 같다.
public class WebConfig implements WebMvcConfigurer
"WebMvcConfigurer" 인터페이스를 상속 받으면 여러가지 옵션들을 오버라이딩 할 수 있다. 그 중 "addViewControllers" 와 "addInterceptors" 함수를 사용할 것 이다. 사용 방법은 다음과 같다.
"addViewControllers" 함수는 특정 URL 주소를 View 페이지로 리턴하는 기능을 갖는다. 여기에서는, 루트('/')를 입력하였을 때 login 페이지로 이동하는 설정을 하였다. 사실 이 기능은 스프링에서 기본적으로 제공하는 기능이나 추후 응용을 위해 작성하였다.
"addInterceptors" 함수는 특정 패턴의 URL 호출 시 이를 감지하여 컨트롤러로 가기 전 또는 컨트롤러 이후의 데이터를 가로채기한다. 별도의 핸들러를 생성하여 주입하면 HandlerInterceptor 인터페이스를 통해 reqeust, response, handler, modelAndView 데이터들을 가공할 수 있다.
@Autowired
CustomHttpInterceptor HandlerInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
// WebMvcConfigurer.super.addInterceptors(registry);
registry.addInterceptor(HandlerInterceptor)
.addPathPatterns("/**");
}
여기에서, Autowired된 HandlerInterceptor는 별도로 생성한 핸들러 클래스이다.
public class CustomHttpInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}