인터셉터 생성 및 사용
//인터셉터 구현
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestURI = request.getRequestURI();
String uuid = UUID.randomUUID().toString();
request.setAttribute(LOG_ID, uuid);
//@RequestMapping: HandlerMethod
//정적 리소스: ResourceHttpRequestHandler
if (handler instanceof HandlerMethod) {
HandlerMethod hm = (HandlerMethod) handler; //호출할 컨트롤러 메서드의 모든 정보가 포함되어 있다.
}
log.info("REQUEST [{}][{}][{}]", uuid, requestURI, handler);
return true; //false 진행X, 따라서 항상 true,
}
//인터셉터 등록
@Configuration //스프링 설정 클래스를 정의시. 부트에는 필요없다고 한다. 하지만 등록할것
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LogInterceptor())
.order(1)
.addPathPatterns("/**") //모든 url 등록
.excludePathPatterns("/css/**", "/*.ico", "/error"); //그중 제외할 url (필수)
registry.addInterceptor(new LoginCheckInterceptor()) //여러개 있는 경우 순서 등록
.order(2)
.addPathPatterns("/**")
.excludePathPatterns(
"/", "/members/add", "/login", "/logout",
"/css/**", "/*.ico", "/error"
);
}
//...
}