定义拦截器须要实现HandlerInterceptor接口,该接口中由三个方法:afterCompletion、postHandle、preHandle。web
public class TestHandlerInterceptor implements HandlerInterceptor { /** * 执行Handler后执行。 * 能够在该方法进行统一的异常处理、统一的日志处理 */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } /** * 进入Handler方法以后,返回ModelAndView以前执行。 * 应用场景从ModelAndView出发,将公用的模型数据在该方法传到视图。 * 也能够统一指定视图。 */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * 进入Handler方法以前执行 * 该方法能够用于身份认证、身份受权。 * 如身份认证未经过,须要此方法拦截再也不向下执行。 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return false;//false:拦截。true:放行 } }
拦截器配置:spring
一、SpringMVC的拦截器是针对HandlerMapping进行拦截设置。
若在某个HandlerMapping中配置拦截,通过该HandlerMapping映射成功的Handler最终使用该拦截器。mvc
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="interceptors"> <list> <ref bean="handlerInterceptor1"/> <ref bean="handlerInterceptor2"/> </list> </property> </bean> <bean id="handlerInterceptor1" class="handlerInterceptor1全路径"/> <bean id="handlerInterceptor2" class="handlerInterceptor2全路径"/>
二、SpringMVC能够配置相似于全局的拦截器,SpringMVC框架将配置的相似全局的拦截器注入到每一个HandlerMapping中。app
<!-- 拦截器 --> <mvc:interceptors> <!-- 多个拦截器,顺序执行 --> <mvc:interceptor> <!-- /**:表示全部url包含子url路径 --> <mvc:mapping path="/**"/> <bean class="handlerInterceptor1全路径"></bean> </mvc:interceptor> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="handlerInterceptor2全路径"></bean> </mvc:interceptor> </mvc:interceptors>