【发布时间】:2020-08-02 11:20:57
【问题描述】:
我有这个带有preHandle 和afterCompletion 方法的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!=1 和dispatcher.forward(request, response) 被调用时,aftercompletion 不会被触发......我知道这个接缝是合乎逻辑的,但无论如何我可以在完成后拦截这些转发的调用吗?
【问题讨论】:
标签: java spring interceptor java-ee-6 spring-restcontroller