interceptor 란
인터셉터는 무언가를 가로챈다 라는 의미로 쓰인다.
인터셉터는 컨트롤러의 URI에 접근하는 과정에서 무언가를 제어할 필요가 있을 때 사용된다.
예로 로그인이 필요한부분에 접근을 할때 인터셉터를 이용해서 로그인을 하도록 로그인 페이지로 이동하는 식의
방법으로 사용 할 수 있다.
인터셉터는 HandlerInterceptorAdapter를 상속받아 구현할 수 있다.
클래스는 preHandle, postHandle, afterCompletion, afterConcurrentHandlingStarted
네 개의 메소드를 가지고 있다.
@Component
public class LoggerInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return ture;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
}
그 중에 preHandle, postHandle 두가지를 override 해준다.
PreHandle
컨트롤러 실행 직전에 동작.
반환 값이 true일 경우 정상적으로 진행이 되고, false일 경우 실행이 멈춘다.
PostHandle
컨트롤러 진입 후 view가 랜더링 되기 전 수행이 된다.
전달인자의 modelAndView을 통해 화면 단에 들어가는 데이터 등의 조작이 가능.
WebMvcConfigurer인터페이스를 상속받은 설정 클래스.
@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {
@Autowired
LoggerInterceptor loggerInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loggerInterceptor)
.addPathPatterns("/board/*")
.excludePathPatterns("/user/login")
.excludePathPatterns("/");
}
}
addPathPatterns, excludePathPatterns 를 통해서 특정 url을 추가, 제외를 할 수 있다.