본문 바로가기

Springあるある

HandlerMethod 인터페이스(Feat. @RequestMapping,ResourceHttpHandler,preHandle())

@Slf4j
public class LogInterceptor implements HandlerInterceptor {


    public static final String LOG_ID = "logId";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
    
    // @RequestMapping 요청인 경우 handler 매개변수에 HandlerMethod가 넘어옴
    // 정적 리소스 요청인 경우 handler 매개변수에 ResourceHttpRequestHandler가 넘어옴
    Object handler) 
    
    throws Exception {

        

        if( handler instanceof HandlerMethod){
            HandlerMethod handlerMethod = (HandlerMethod) handler; // 호출할 컨트롤러 메서드의 모든 정보가 포함돼 있음.

        }

        String requestURI = request.getRequestURI();
        String uuid = UUID.randomUUID().toString();

        request.setAttribute(LOG_ID,uuid);  // 이렇게 설정을 해 놓고,postHandle()과 afterCompletion()
        // 에서 request.getAttribute("logId")를 사용하여 uuid 꺼내어서 사용
        log.info("REQUEST [{}], [{}], [{}]",uuid,requestURI,handler);
        return true;

    }