Spring Boot 는 사용자 가 요청 한 차단 기 를 감청 합 니 다.

프로젝트 에 서 는 사용자 의 구체 적 인 요청 작업 을 감청 해 야 합 니 다. 차단 기 를 통 해 감청 하고 해당 로그 기록 프로젝트 의 구축 과 Spring Boot, Spring Boot 는 차단 기 를 실현 하 는 것 이 쉽 습 니 다.
Spring Boot 의 핵심 시작 클래스 계승 WebMvcConfigurerAdapter
    //      
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new RequestLog());
    }
   //  RequestLog          

차단기 작성
public class RequestLog extends HandlerInterceptorAdapter {

    /**
     *     
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        String ip = request.getRemoteAddr();
        long startTime = System.currentTimeMillis();
        request.setAttribute("requestStartTime", startTime);
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        //     token
        Method method = handlerMethod.getMethod();
        System.out.println("  :"+ip+",    :"+method.getDeclaringClass().getName() + "." + method.getName());
        return true;
    }

    // controller    
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        HandlerMethod handlerMethod = (HandlerMethod) handler;
        Method method = handlerMethod.getMethod();
        long startTime = (Long) request.getAttribute("requestStartTime");

        long endTime = System.currentTimeMillis();

        long executeTime = endTime - startTime;

        // log it
        if (executeTime > 1000) {
            System.out.println("[" + method.getDeclaringClass().getName() + "." + method.getName() + "]      : "
                    + executeTime + "ms");
        } else {
            System.out.println("[" + method.getDeclaringClass().getSimpleName() + "." + method.getName() + "]      : "
                    + executeTime + "ms");
        }

    }
}


우리 가 실현 하 는 차단 기 는 Handler InterceptorAdapter 를 계승 하고 다음 과 같은 세 가지 방법 을 다시 써 야 합 니 다.
 preHandle ,      、       ; 
 postHandle ,     ModelAndView;  

그리고 중요 한 방법 이 하나 더 있 습 니 다. after Complete 에서 이 세 가지 방법의 집행 절 차 를 소개 합 니 다.
요청 을 시작 하여 차단기 체인 에 들 어가 모든 차단기 의 preHandle 방법 을 실행 합 니 다. preHandle 방법 이 false 로 돌아 갈 때 현재 차단기 에서 모든 차단기 의 after Complete 방법 을 실행 하고 차단기 체인 을 종료 합 니 다.preHandle 방법 이 모두 true 일 때 모든 차단기 가 실 행 될 때 까지 다음 차단 기 를 실행 합 니 다.차 단 된 컨트롤 러 를 다시 실행 합 니 다.그 다음 에 차단기 체인 에 들 어가 모든 차단기 의 post Handle 방법 을 실행 하고 마지막 차단기 에서 모든 차단기 의 after Complete 방법 을 실행 합 니 다. 차단기 가 이상 을 던 졌 을 때 현재 차단기 에서 모든 차단기 의 after Complete 방법 을 실행 합 니 다.
preHandle 방법: true 를 되 돌려 줍 니 다. 매 핑 프로세서 실행 체인 은 계속 실 행 됩 니 다.false 로 돌아 갈 때, Dispatcher Servlet 프로 세 서 는 실행 체인 의 다른 차단기 와 프로 세 서 를 계속 실행 하지 않 고 차단기 가 요청 을 처리 했다 고 생각 합 니 다.

좋은 웹페이지 즐겨찾기