放行的含义是,如果有下一个拦截器就执行下一个,如果该拦截器处于拦截器链的最后一个,则执行控制器当中的方法。
preHandle
按照拦截器的顺序进行调用,只要配置了都会调用。
如果程序员决定该拦截器对请求进行拦截处理后还要调用其他的拦截器,或者是业务处理器进行处理,则返回true。
如果程序员决定不需要再调用其他的组件去处理请求,则返回false。
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; }
postHandle
按照拦截器定义逆序调用,在拦截器链内所有拦截器返回成功后调用。
在业务处理器处理完请求后,DispatcherServlet向客户端返回响应前被调用。
在该方法中对用户请求request进行处理。
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { }
afterCompletion
按照拦截器定义逆序调用,只有preHandler返回true才调用。
在DispatcherServlet完全处理请求后被调用。
在该方法中可以进行一些资源清理的操作。
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { }
作用路径可以通过在配置文件中配置。
<mvc:interceptors> <mvc:interceptor>
<!-- 用于指定拦截的url --> <mvc:mapping path="/**" />
<!-- 用于排除指定的 url>
<mvc:exclude-mapping path="" /> <bean id="handlerInterceptorDemo1" class="com.itcast.web.interceptor.HandlerInterceptorDemo1"></bean>
</mvc:interceptor> </mvc:interceptors>
原文:https://www.cnblogs.com/guancangtingbai/p/12679558.html