HandlerMapping interface maps a method to a URL so that the DispatcherServlet will be able to invoke it when processing a request. And DispatcherServlet uses HandlerAdapter to actually invoke the method.
HandlerMapping → DispactherServlet→ HandlerAdapter
and before and after HandlerAdapter or after the all process, interceptor comes in.
The interceptor can be used for the cross-cutting concerns and to avoid the repetitive handler code like logging, changing globally used parameters in Spring model etc..
for more details;
HandlerInterceptorAdapter
, where interceptor methods are configuredpreHandle
, postHandle
, afterCompletion
WebMvcConfigurerAdapter
(deprecated) or implements WebMvcConfigurer
, register the class that configures the interceptor methods.package kr.or.connect.guestbook.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println(handler.toString()+ "를 호출 했습닌다");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println(handler.toString()+"가 종료되었습니다" + modelAndView.getViewName() + "을 view로 사용합니다");
}
}
package kr.or.connect.guestbook.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.handler.MappedInterceptor;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import kr.or.connect.guestbook.interceptor.LoginInterceptor;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"kr.or.connect.guestbook.controller"})
public class WebMvcContextConfiguration extends WebMvcConfigurerAdapter {
//...config methods ... /
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor());
}
}