NameIntercetor << 이름으로 클래스 생성 해주고 HandlerInterceptorAdapter 를 extends(상속)받아 구현해 줍니다.
package com.projectPath.backend.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class NameInterceptor extends HandlerInterceptorAdapter {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("============ Start NameInterceptor=============== Url :" + request.getRequestURI());
// return super.preHandle(request, response, handler);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("============ END NameInterceptor=============== Url :" + request.getRequestURI());
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
-preHandler : 컨트롤러에 도착하기전에 동작하는 메소드로 return값이 true이면 진행, false이면 멈춥니다.(해당 기능과 매핑된 URI의 정보를 쉽게 파악할 수 있도록 콘솔에 로그를 출력하도록 처리합니다.)
-postHandler : 컨트롤러에 도착하여 view가 랜더링되기 전에 동작합니다.(보통 로깅의 끝을 로그로 나타 냅니다.)
-afterCompletion: view가 정상적으로 랜더링된 후에 마지막에 실행됩니다.
package com.upts.projectPath.config;
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 I18nInterceptor())
.addPathPatterns("/**")
.excludePathPatterns("/api/v1/test/**")
.excludePathPatterns("/api/v1/openapi/code/**");
registry.addInterceptor(new NameInterceptor())
.addPathPatterns("/api/v1/openapi/code/**");
}
}
SpringLegacy에서는 servlet-context.xml에서 맵핑할 정보와 어떤 인터셉터를 적용할건지 처리를 하곤 했는데, 부트에서는 java를 통해 설정을 진행합니다.
스프링 부트는 addIntercepotrs를 통해 사용할 Interceptor를 등록하고. 패턴을 등록해줍니다.(2개의 Interceptor 연동)
WebMvcConfig클래스 생성후 WebMvcConfigurer 를 상속(implements) 받는다.
addInterceptors 를 매소드를 선언후 addInterceptor를 이용해 내가 만든 NameInterceptor를 연동 하면 된다.
-addPathPatterns : 해당 메소드는 동작해야할 url패턴을 설정합니다.
-excludePathPatterns: 해당 메소드는 적용한 인터셉터에서 제외할 url패턴을 설정합니다.
'JAVA > Interceptor(인터셉터)' 카테고리의 다른 글
Interceptor(service 로직) 사용 시 의존성 주입 (0) | 2022.03.31 |
---|