[SPRING] Spring HandlerInterceptorAdapter postHandle이 보장됩니까?
SPRINGSpring HandlerInterceptorAdapter postHandle이 보장됩니까?
현재 비슷한 기능을 처리하는 두 개의 인터셉터가 있습니다. 나는 이것을 병합하고 싶다.
하나의 인터셉터는 액세스 요청 로거이며 로그인 한 사용자, 세션 ID 및 요청 된 URL을 표시합니다.
다른 인터셉터는 프로세스 시간 로거입니다.
액세스 로거는 기록되어야하는 모든 것을 기록하기 위해 요청을 preHandle 메소드에 기록합니다. 아이디어는 예외 (예 : 예외) 후에 발생하는 상황에 관계없이 정확한 액세스 요청이 거기에있을 것이라는 것입니다.
그러나 프로세스 시간 로거는 특성상 postHandle 메소드에 로그인해야합니다.
이 기능을 병합하려면 모든 것을 단일 postHandle 메서드로 옮겨야합니다. 그러나 예외가 어딘가에서 발생하면 일부 로깅이 손실 될 수 있습니다. 특히 응용 프로그램 코드에서 제대로 처리되지 않은 경우가 있습니다.
이러한 고려 사항에 대한 보증이나 설명이 있습니까?
해결법
-
==============================
1.핸들러 메소드가 예외를 throw하는 경우에도 호출되는 afterCompletion의 논리를 병합하는 것을 고려할 수 있습니다. 좋은 온라인 예제
핸들러 메소드가 예외를 throw하는 경우에도 호출되는 afterCompletion의 논리를 병합하는 것을 고려할 수 있습니다. 좋은 온라인 예제
public class RequestProcessingTimeInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory .getLogger(RequestProcessingTimeInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { long startTime = System.currentTimeMillis(); logger.info("Request URL::" + request.getRequestURL().toString() + ":: Start Time=" + System.currentTimeMillis()); request.setAttribute("startTime", startTime); //if returned false, we need to make sure 'response' is sent return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("Request URL::" + request.getRequestURL().toString() + " Sent to Handler :: Current Time=" + System.currentTimeMillis()); //we can add attributes in the modelAndView and use that in the view page } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { long startTime = (Long) request.getAttribute("startTime"); logger.info("Request URL::" + request.getRequestURL().toString() + ":: End Time=" + System.currentTimeMillis()); logger.info("Request URL::" + request.getRequestURL().toString() + ":: Time Taken=" + (System.currentTimeMillis() - startTime)); } }
from https://stackoverflow.com/questions/28022108/is-spring-handlerinterceptoradapter-posthandle-guaranteed by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Jackson을 사용하여 String에서 ArrayList를 deserialize합니다. (0) | 2019.02.18 |
---|---|
[SPRING] 스프링을 사용하여 서블릿에 객체를 삽입하고 싶습니다. (0) | 2019.02.18 |
[SPRING] AngularJS - 404 로그 아웃시 스프링 보안 (0) | 2019.02.18 |
[SPRING] Spring에서 requestBody로 문자열을 날짜로 변환 할 수 없습니다. (0) | 2019.02.18 |
[SPRING] jsp에서 Spring Controller 메소드로 매개 변수 전달하기 (0) | 2019.02.18 |