역할
Interceptor란 컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로채는 역할을 한다.
사용 이유
- 코드 재사용성 증가
- 메모리 낭비, 서버 부하 감소
- 코드 누락에 대한 위험성 감소
src > main > demo
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import com.sbs.exam.demo.interceptor.BeforeActionInterceptor;
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
// beforeActionInterceptor 인터셉터 불러오기
@Autowired
BeforeActionInterceptor beforeActionInterceptor;
// 이 함수는 인터셉터를 적용하는 역할을 합니다.
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(beforeActionInterceptor).addPathPatterns("/**").excludePathPatterns("/resource/**")
.excludePathPatterns("/error");
}
}
src > main > demo > interceptor
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sbs.exam.demo.vo.Rq;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
@Component
public class BeforeActionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception {
// 등록 시
// Rq rq = new Rq(req);
// req.setAttribute("rq", rq);
return HandlerInterceptor.super.preHandle(req, resp, handler);
}
}
컨트롤러에서 사용 시
Rq rq = (Rq)req.getAttribute("rq");