本文主要介绍如何创建和配置拦截器以及拦截器各个方法的执行顺序。
当preHandle方法返回true时,拦截器会按照preHandle -> postHandle -> afterCompletion
的顺序执行;当preHandle方法返回false时,只会执行preHandle方法,后续方法不再执行
。
代码如下:
首先,创建一个拦截器类实现HandlerInterceptor接口:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle method is called");
return true; // returning true to continue execution, false to stop
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle method is called");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion method is called");
}
}
然后,在Spring配置文件中配置拦截器:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.example.CustomInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
在这个示例中,创建了一个CustomInterceptor拦截器类,实现了preHandle、postHandle和afterCompletion三个方法。在Spring配置文件中配置了这个拦截器拦截所有的请求(path="/**")
。
当preHandle方法返回true时,会依次执行preHandle、postHandle和afterCompletion方法;当preHandle方法返回false时,只会执行preHandle方法。