인터셉터란?
- 클라이언트의 요청을 가로채서 처리하는 기능
- 컨트롤러 진입 전, 컨트롤러 처리 후, 화면 처리 후 호출 가능
1. 인터셉터 클래스 생성
- preHandle : 컨트롤러 진입 전 호출
ex) 로그인 여부 체크
- postHandle : 컨트롤러 처리 후 호출
ex) 화면으로 로그인 정보 전달, 파라미터 전달
- afterCompletion : 화면 호출(화면 렌더링) 까지 끝난 뒤 호출
ex) 화면 호출 후 로그 쌓기
package com.example.demo.config;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class InteceptorConfig implements HandlerInterceptor {
// preHandle -> Controller -> postHandle -> 화면처리 -> afterCompletion
// 컨트롤러 가기 전 실행
@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 handler, Exception ex) throws Exception {
System.out.println("afterHandle");
}
}
2. WebConfig.java 의 addInterceptors 메소드에 인터셉터 설정 추가
- 인터셉터 클래스를 추가한 뒤 인터셉터 처리를 할 URL 패턴과 예외처리 할 URL 패턴을 추가한다.
package com.example.demo.config;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
@Component
public class InteceptorConfig implements HandlerInterceptor {
// preHandle -> Controller -> postHandle -> 화면처리 -> afterCompletion
// 컨트롤러 가기 전 실행
@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 handler, Exception ex) throws Exception {
System.out.println("afterHandle");
}
}
3. 테스트
- 샘플URL(http://localhost:8080/sample/dashboard) 호출 후 인터셉터가 순차적으로 잘 타는지 확인
'스프링부트+gradle+JSP+STS(Eclipse)' 카테고리의 다른 글
스프링부트 ajax JSON 통신 (0) | 2022.05.23 |
---|---|
스프링부트 부트스트랩(bootstrap) 적용하기 (0) | 2022.05.20 |
스프링부트 tiles(타일즈) 설정 (2) | 2022.05.09 |
Mysql 사용자 계정 생성 (0) | 2022.05.06 |
스프링부트 DB(Mariadb, Mybatis) 설정 (0) | 2022.04.29 |
댓글