FrameWorks/Spring & Boot

Spring Boot에서 handlerInterceptor 설정

ABCD 2023. 2. 8.

HanlderInterceptor란??

  •  Spring Boot에서 지원하는 FrameWork로 해당 조건에 만족하는 상황에서 응답시점을 가로채서 전/후 처리를 하는 역할

 

Interceptor생성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
public class MyInterceptor implements HandlerInterceptor {
 
    private Logger logger = LoggerFactory.getLogger(this.getClass());
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle 작동");
        return true;
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle 작동");
    }
 
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception {
        System.out.println("afterCompletion 작동");
    }
}
cs

 

preHandle

(HttpServletRequest request, HttpServletResponse response, Object handler)

  • 컨트롤러에 진입하기 전에 실행.
  • return값이 true이면 컨트롤러 진입 false일경우 진입하지 않음
  • Object객체에는 진입하려는 컨트롤러의 클래스 객체가 담겨 있음

postHandle

(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)

  • 컨트롤러 진입 후 View가 랜더링 되기 전에 수행

afterCompletion

(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex)

  • 컨트롤러 진입 후 View가 랜더링 된 후에 수행

afterConcurrentHandlingStarted

(HttpServletRequest request, HttpServletResponse response, Object h)

  • 비동기 요청시 postHandle과 afterCompletion이 수행되지 않고 수행

Interceptor 등록하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 WebMvcConfig implements WebMvcConfigurer {
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor())
                .addPathPatterns("/*"// 해당 경로에 접근하기 전에 인터셉터가 가로챈다.
                .excludePathPatterns("/boards"); // 해당 경로는 인터셉터가 가로채지 않는다.
    }
}
cs
728x90
반응형

댓글

💲 추천 글