Interceptor 란 가로채다, 차단하다 라는 의미로 사용자의 요청을 가로채는 역할을 하고
각각 3가지의 Method로 되어있다
preHandle - 사용자의 요청으로 Controller 에 가기 전에 가로챈다
postHandle - 사용자의 요청으로 Controller 의 동작이 끝나면 실행한다
afterCompletion - 화면의 실행이 끝나면 실행된다
Filter와 비슷한 기능을 하지만 동작하는 시점이 다르다
Client ------> Filter ------> Dispatcher Servlet ------> Intercepor ------> Controller
Client <------ Filter <------ Dispatcher Servlet <------ Intercepor <------ Controller
interceptor.class
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.err.println("내가 먼저 실행되지롱~?");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.err.println("난 끝나고 실행할꺼야!");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.err.println("그럼 난 화면을 보여주고 실행할래!!");
}
}
HandlerInterceptor 을 상속받아 method를 구현한다
config.class
import com.example.practice.interceptor.CustomInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor())
.addPathPatterns("/**") // 모두 가로챈다
.excludePathPatterns("/css/**", "/js/**", "/image/**", "/upload/**");
// 지정된 url은 interceptor에서 제외시킨다
// 여러개 지정할때 사용
/* registry.addInterceptor(new CustomInterceptor1())
.order(1)
.addPathPatterns("/**");
registry.addInterceptor(new CustomInterceptor2())
.order(2)
.addPathPatterns("/**")
.excludePathPatterns("/css/**", "/js/**", "/image/**", "/upload/**");*/
}
}
config 에 생성한 interceptor를 등록해 준다
'개발 > Spring' 카테고리의 다른 글
[SpringBoot] Swagger 적용하기(SpringBoot 3.x.x 이상) (0) | 2024.07.05 |
---|---|
[SpringBoot] Ajax 통신으로 json 주고 받기 (0) | 2024.07.04 |
[SpringBoot] Gradle + React 같이 빌드하기 (0) | 2024.06.17 |
[SpringBoot] WebSocket 채팅 테스트 (0) | 2024.06.09 |
[SpringBoot] Cors 적용 및 테스트 하기 (0) | 2024.05.11 |
댓글