public class TestInterceptor1 implements HandlerInterceptor{ - preHandle, postHandle, afterCompletion를 override 하기 위해 HandlerInterceptor를 상속받는다. - 필요한 메서드만 override하면 된다.
preHandle - Controller의 메서드가 호출되기 전 호출 - false를 반환하면 코드의 흐름이 중단된다. Controller의 메서드로 가지도 않고, postHandle, afterCompletion, 또 다른 Intercepter들 모두 중단된다.
postHandle - Controller의 메서드가 호출된 후 호출
afterCompletion - View 처리까지 완료되고 응답 결과가 브라우저로 전달하기 전에 호출
ServletAppContext.java에 Interceptor 등록
▼ ServletAppContext.java
....
public class ServletAppContext implements WebMvcConfigurer{
.....
// 인터셉터를 등록한다.
public void addInterceptors(InterceptorRegistry registry) {
WebMvcConfigurer.super.addInterceptors(registry);
TestInterceptor1 inter1 = new TestInterceptor1();
TestInterceptor2 inter2 = new TestInterceptor2();
TestInterceptor3 inter3 = new TestInterceptor3();
TestInterceptor4 inter4 = new TestInterceptor4();
TestInterceptor5 inter5 = new TestInterceptor5();
InterceptorRegistration reg1 = registry.addInterceptor(inter1);
InterceptorRegistration reg2 = registry.addInterceptor(inter2);
InterceptorRegistration reg3 = registry.addInterceptor(inter3);
InterceptorRegistration reg4 = registry.addInterceptor(inter4);
InterceptorRegistration reg5 = registry.addInterceptor(inter5);
reg1.addPathPatterns("/test1");
reg2.addPathPatterns("/test1");
reg3.addPathPatterns("/test2");
// 둘다 적용 - 방법1
// reg4.addPathPatterns("/test1");
// reg4.addPathPatterns("/test2");
// 방법2
reg4.addPathPatterns("/test1", "/test2");
// reg5.addPathPatterns("/sub1/test3", "/sub1/test4");
reg5.addPathPatterns("/sub1/*");
// 설정된 경로중 제외할 경로
reg5.excludePathPatterns("/sub1/test3");
}
}
public void addInterceptors(InterceptorRegistry registry) { WebMvcConfigurer.super.addInterceptors(registry); - Interceptor 등록을 위해 addInterceptors 메서드를 override 해주면 된다.
TestInterceptor1 inter1 = new TestInterceptor1(); - Interceptor 등록을 위해 위에서 작성한 TestInterceptor1 객체 생성
InterceptorRegistration reg1 = registry.addInterceptor(inter1); - Interceptor 등록
reg1.addPathPatterns("/test1"); - 등록한 interceptor가 적용할 URI 설정
Interceptor를 적용할 URI 설정 방법 - addPathpatterns를 이용하여 여러 URI 설정 reg4.addPathPatterns("/test1"); reg4.addPathPatterns("/test2"); - addPathPattorns를 이용하여 여러 URI 설정 방법2 reg4.addPathPatterns("/test1", "/test2"); reg4.addPathPatterns("/sub1/*"); - excludePathPatterns()를 이용하여 설정된 특정 URI를 제외 reg5.excludePathPatterns("/sub1/test3");
결과 화면 /test1 요청 시 /test2 요청 시 /sub1/test3 요청 시 실행된 Interceptor가 없다.
<beans:bean class='kr.co.softcampus.interceptor.TestInterceptor1' id='inter1'/> - 여러 경로에 Interceptor가 필요한 경우 bean을 주입하고 필요할 때마다 가져온다.
<interceptor> <mapping path="/test2"/> <beans:bean class='kr.co.softcampus.interceptor.TestInterceptor2'/> </interceptor> - 한 경로에만 Interceptor가 필요한 경우 이 안에서만 사용하도록 bean을 주입할 수 있다.