拦截器的使用场景:
权限验证
返回视图之前进行统一处理
记录控制器方法执行的日志
计算控制器方法调用的耗时情况 ……
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>