반응형
HandlerInterceptor
Spring Framework에서 HandlerInterceptor는 요청 처리의 전, 후 또는 요청 전체에 대한 처리를 수행하는 인터셉터입니다. 주로 요청의 전처리, 후처리, 예외 처리 등을 담당하여 공통적인 작업을 처리할 수 있도록 도와줍니다.
인터셉터 생성
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 요청 전처리 작업 수행
// 예: 인증, 권한 체크
return true; // 계속해서 핸들러 메서드 실행
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 핸들러 메서드 실행 후 후처리 작업 수행
// 예: 모델 데이터 조작, 뷰 선택 변경
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 뷰가 렌더링된 후 완료 작업 수행
// 예: 로깅, 리소스 정리
}
}
- HandlerInterceptor는 `HandlerInterceptor` 인터페이스를 구현하여 사용할 수 있습니다.
- `preHandle()`
- 핸들러 메서드 실행 전에 호출되는 메서드입니다. 요청 전에 수행해야 할 작업을 구현할 수 있습니다.
- true를 반환하면 핸들러 메서드가 실행됩니다.
- false를 반환하면 핸들러 메서드를 실행하지 않습니다.
- `postHandle()`
- 핸들러 메서드가 실행된 후, 뷰가 렌더링되기 전에 호출되는 메서드입니다. 핸들러 메서드의 실행 결과에 대한 후처리 작업을 구현할 수 있습니다.
- `afterCompletion()`
- 뷰가 렌더링된 후에 호출되는 메서드입니다. 요청 처리가 완전히 완료되었을 때, 리소스 정리 등의 작업을 구현할 수 있습니다.
- 컨트롤러 실행 과정에서 예외가 발생할 경우 네 번째 파라미터에 전달됩니다.
- 예외가 발생하지 않으면 null이 전달됩니다. 주로 이는 로그를 남기거나 실행 시간을 기록하는 등의 후처리를 하기위해 쓰입니다
인터셉터 적용
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new CustomInterceptor()).addPathPatterns("/**");
}
}
- 설정 파일에서 WebMvcConfigurer를 구현하여 `addInterceptors()` 메서드를 오버라이드하여 인터셉터를 등록할 수 있습니다.
- `InterceptorRegistry` 객체가 제공하는 메서드
- `addInterceptor`: 인터셉터를 등록.
- `addPathPatterns`: 특정 경로에 있는 인터셉터 적용.
- `excludePathPatterns`: 특정 경로에 있는 인터셉터 제외.
- `order`: 인터셉터의 실행 순서를 지정. 여러 개의 인터셉터가 등록되어 있을 때 실행 순서를 제어. 값이 작을수록 우선순위가 높습니다.
- `excludeUrl`: 특정 URL을 제외하고 인터셉터를 적용. addPathPatterns() 메서드로 등록한 패턴 중에서 제외할 URL을 지정할 수 있습니다.
- `order`: Ordered 인터페이스를 구현한 객체를 통해 인터셉터의 실행 순서 제어. Ordered 인터페이스를 구현한 객체의 getOrder() 메서드를 호출하여 우선순위를 가져옵니다.
- `addWebRequestInterceptor`: WebRequestInterceptor를 등록. WebRequestInterceptor는 HandlerInterceptor와 유사한 역할을 수행하지만, HandlerInterceptor와 달리 서블릿 기반의 요청과 관련된 콜백 메서드를 제공합니다.
반응형
'Spring Framework' 카테고리의 다른 글
Spring 스프링 MVC란? (feat. 프런트 컨트롤러 구조) (0) | 2022.09.05 |
---|---|
Spring Cookie와 Session (로그인 유지 예제) (0) | 2022.09.01 |
Spring 다국어 적용하는 방법들 (0) | 2022.08.31 |
Spring 트랜잭션 (0) | 2022.08.29 |
Spring 스프링 JDBC (feat. JdbcTemplate) (0) | 2022.08.26 |