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;

interceptor의 사용

  1. create a class that extends HandlerInterceptorAdapter, where interceptor methods are configured
  2. write codes you want overriding methods preHandle, postHandle, afterCompletion
  3. in MVC configuration class which extends WebMvcConfigurerAdapter(deprecated) or implements WebMvcConfigurer, register the class that configures the interceptor methods.

practices

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());
    }
}

result