源代码
https://download.csdn.net/download/qzc70919700/19927717
一、全局拦截器
springmvc.xml
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 多个拦截器,顺序执行 -->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="demo.mvc.intercepter.Intercepter1"></bean>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="demo.mvc.intercepter.Intercepter2"></bean>
</mvc:interceptor>
</mvc:interceptors>
package demo.mvc.intercepter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class Intercepter1 implements HandlerInterceptor {
/**
* 在处理器映射器之前执行
* return false=拦截;true=放行
*/
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("这是第 1 个拦截器Intercepter1 --> preHandle");
return true;
}
/**
* 还没有调用controller,还没有返回modelAndView时执行
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("这是第 1 个拦截器Intercepter1 --> postHandle");
}
/**
* 返回modelAndView之后执行
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("这是第 1 个拦截器Intercepter1 --> afterCompletion");
}
}
package demo.mvc.intercepter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class Intercepter2 implements HandlerInterceptor {
/**
* 在处理器映射器之前执行
* return false=拦截;true=放行
*/
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("这是第 2 个拦截器Intercepter2 --> preHandle");
return false;
}
/**
* 还没有调用controller,还没有返回modelAndView时执行
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("这是第 2 个拦截器Intercepter2 --> postHandle");
}
/**
* 返回modelAndView之后执行
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("这是第 2 个拦截器Intercepter2 --> afterCompletion");
}
}
二、注意事项
1、如果preHandle返回false,所有拦截器的postHandle都不执行;
2、凡是preHandle返回true,afterCompletion必须执行。