반응형
1. 인터셉터(Interceptor) 란
'가로채다' 라는 의미가 있다.
위의 의미와 같이 Client에서 Server로 보낸 Request를 Controller에 도달하기 전 가로채도록 하는 역할을 한다.
Interceptor의 장점으로는
코드 누락에 대한 위험 감수
코드 재사용성을 증가 시켜 메모리 낭비, 서버 부하 감소 가 있다.
2. Interceptor 메서드
Interceptor는 스프링에서 제공해주는 HandlerInterceptor을 상속받아 사용가능하다.
HandlerInterceptor에는 3가지 메서드가 있다.
preHandle()
Controller가 호출되기전에 실행된다.
Controller 실행 전 처리할 작업이나 정보를 가공, 추가하는 경우 사용된다.
return 값이 true일 경우 정상적으로 Controller로 접근하고
false일 경우 Controller에 접근하지 않는다.
postHandle()
Controller가 실행 후 View가 생성되기 이전에 호출한다.
ModelAndView를 통해 View에 들어가는 데이터를 조작할 수 있다.
afterCompletion()
View의 모든 작업이 완료된 후 실행된다.
리소스를 반환해주기 적당한 메서드이다.
3. 설정 및 사용
1) servlet-context.xml
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.keep.memo.TestInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
2) TestInterceptor.java
public class TestInterceptor implements HandlerInterceptor{
private static final Logger LOGGER = LoggerFactory.getLogger(TestInterceptor.class);
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// View의 모든 작업이 완료된 후 실행된다.
// 리소스를 반환해주기 적당한 메서드이다.
LOGGER.info("KEEP MEMO - afterCompletion");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
// Controller가 실행 후 View가 생성되기 이전에 호출한다.
// ModelAndView를 통해 View에 들어가는 데이터를 조작할 수 있다.
LOGGER.info("KEEP MEMO - post handle");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// Controller가 호출되기전에 실행된다.
// Controller 실행 전 처리할 작업이나 정보를 가공, 추가하는 경우 사용된다.
// return 값이 true일 경우 정상적으로 Controller로 접근하고
// false일 경우 Controller에 접근하지 않는다.
LOGGER.info("KEEP MEMO - pre Handle");
return true;
}
}
3) Controller.java
@RequestMapping(value="/home.do")
public String home(@RequestParam Map<String, Object> paramMap, HttpSession session, HttpServletRequest request, Model model) throws Exception {
System.err.println("KEEP MEMO - Controller");
return "/home";
}
4) CONSOLE
참고-https://kimvampa.tistory.com/127
반응형
'SPRING' 카테고리의 다른 글
[JAVA/SPRING] javax.imageio.IIOException: Unsupported Image Type (CMYK 이미지 오류) (0) | 2023.05.30 |
---|---|
[SPRING] 엑셀 양식에 데이터 삽입 후 다운로드 (Apache POI) (0) | 2023.01.30 |
[SPRING] @Component 어노테이션 간단 사용법 (0) | 2022.05.11 |
[SPRIING] component-scan 사용법 (available: expected at least 1 bean which qualifies as autowire candidate. 에러) (0) | 2022.03.31 |
[SPRING] MyBatis mapper.xml 수정시 서버 재시작없이 반영하기 (0) | 2022.03.28 |
댓글