拦截器的使用场景: 权限验证 返回视图之前进行统一处理 记录控制器方法执行的日志 计算控制器方法调用的耗时情况 ……
public class MyInterceptor01 implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { // 处理器执行前被调用 // 方法为 true 表示会调用其它拦截器和处理器 // 返回 false 表示中断流程,不会执行后续拦截器和处理器 // 这里可以加入登录校验、权限拦截等 System.out.println("拦截器 1....preHandle..."); return false; } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // 处理器执行后,视图处理前被调用。 // 此时可以通过 ModelAndView 对象模型数据进行处理或对视图进行处理,比如这 里加入公用信息以便页面显示 System.out.println("拦截器 1...postHandle..."); } @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // controller 执行后且视图返回后调用此方法 // 这里可得到执行 controller 时的异常信息 // 这里可记录操作日志 // 这里进行一些资源清理 // 只有当 preHandler 返回 true 时才会执行 System.out.println("拦截器 1...afterCompletion..."); } }配置拦截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path=""/> <mvc:exclude-mapping path=""/> <bean class="com.sy.controller.MyInterceptor"> </bean> </mvc:interceptor> </mvc:interceptors>