Spring MVC拦截器(Interceptor)的配置及使用
拦截器的定义
在 Spring MVC 框架中定义一个拦截器需要对拦截器进行定义和配置,定义一个拦截器可以通过两种方式:一种是通过实现 HandlerInterceptor 接口或继承 HandlerInterceptor 接口的实现类来定义;另一种是通过实现 WebRequestInterceptor 接口或继承 WebRequestInterceptor 接口的实现类来定义。
实现 HandlerInterceptor 接口的定义方式
package interCeptor;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class testInterCepetor implements HandlerInterceptor {
private static Logger log = Logger.getLogger(testInterCepetor.class.getClass());
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 该方法在控制器的处理请求方法前执行,其返回值表示是否中断后续操作,返回 true 表示继续向下执行,返回 false 表示中断后续操作
log.debug("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 该方法在控制器的处理请求方法调用之后、解析视图之前执行,可以通过此方法对请求域中的模型和视图做进一步的修改。
log.debug("postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此方法实现一些资源清理、记录日志信息等工作。
log.debug("afterCompletion");
}
}
spring-config.xml拦截器配置
<mvc:interceptors>
<!-- 拦截所有请求-->
<bean class="interCeptor.testInterCepetor"/>
<mvc:interceptor>
<!-- 拦截所有路径-->
<mvc:mapping path="/**"/>
<!-- 剔除不拦截内容-->
<mvc:exclude-mapping path="/test"/>
<bean class="interCeptor.testInterCepetor"/>
</mvc:interceptor>
<mvc:interceptor>
<!-- 拦截gototest结尾的路径-->
<mvc:mapping path="/gototest"/>
<bean class="interCeptor.testInterCepetor"/>
</mvc:interceptor>
</mvc:interceptors>