Перехватчик Spring не вызывается после отправки запроса - PullRequest
0 голосов
/ 02 августа 2020

У меня есть этот пружинный перехватчик с методами preHandle и afterCompletion:

@Slf4j
public class MyInterceptor extends HandlerInterceptorAdapter {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        String identificationDemande = "";
        try {
            identificationDemande = new ObjectMapper().readTree(request.getInputStream()).path("test").asText();
        } catch (IOException e) {
            log.error("JSON format unvalid", e);
            return true;
        }

        if (StringUtils.equals(identificationDemande, "1")) {
            log.info("preHandle Test without forward");
            return true;
        }

        RequestDispatcher dispatcher = request.getRequestDispatcher("newUrl");
        dispatcher.forward(request, response);
        return false;
    }

    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex) {
        log.info("after completion test");
    }

}

Когда identificationDemande==1 и мой вызов веб-службы не перенаправляются, запускается метод aftercompletion. Но когда вызывается identificationDemande!=1 и dispatcher.forward(request, response), тогда aftercompletion не запускается ... Я знаю, что это швы, чтобы быть logi c, но есть ли способ, чтобы я мог также перехватывать эти перенаправленные вызовы после их завершения?

1 Ответ

0 голосов
/ 02 августа 2020
  • Вы уже знаете в своем preHandle, когда dispatcher.forward(request, response) вернется. Таким образом, вы можете сделать
      try {
         dispatcher.forward(request, response);
         //response is complete now
      }
      finally {
        //your logic
      }
      return false;
...