请求调度后未调用Spring拦截器



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

@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不会被触发。。。我知道这是合乎逻辑的,但在这些转发的呼叫完成后,我是否也可以拦截它们?

  • 您已经在preHandle中知道dispatcher.forward(request, response)何时返回。所以你可以
try {
dispatcher.forward(request, response);
//response is complete now
}
finally {
//your logic
}
return false;

最新更新