【问题标题】:Spring interceptor not called after request dispatch请求分派后未调用 Spring 拦截器
【发布时间】:2020-08-02 11:20:57
【问题描述】:

我有这个带有preHandleafterCompletion 方法的spring 拦截器:

@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 和我的webservice 调用没有被转发,那么aftercompletion 方法被触发。但是当identificationDemande!=1dispatcher.forward(request, response) 被调用时,aftercompletion 不会被触发......我知道这个接缝是合乎逻辑的,但无论如何我可以在完成后拦截这些转发的调用吗?

【问题讨论】:

    标签: java spring interceptor java-ee-6 spring-restcontroller


    【解决方案1】:
    • 您已经在preHandle 中知道dispatcher.forward(request, response) 何时返回。所以你可以这样做
          try {
             dispatcher.forward(request, response);
             //response is complete now
          }
          finally {
            //your logic
          }
          return false;
    

    【讨论】:

    • 拦截器被配置为拦截包含转发请求的路径模式!以及添加 try bloc 将如何解决任何问题?!
    • 我从你的问题中了解到,你想做一些你本来可以在afterCompletion 中正常完成的清理任务,但是由于你自己处理响应,所以你在 prehandle 之后立即执行
    • 不,我不想做任何清理工作,我只想调用 afterCompletion
    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多