본문 바로가기
개발/Spring

[SpringBoot] Interceptor 구현하기

by 코딩하는 흰둥이 2024. 6. 18.

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를 등록해 준다

 

 

 

 

Login 페이지 실행 시 찍힌 로그

댓글